Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Comitar transacciones con DBExpress, Delphi 6 y Firebird (https://www.clubdelphi.com/foros/showthread.php?t=32089)

cesar_picazo 26-05-2006 00:34:58

Comitar transacciones con DBExpress, Delphi 6 y Firebird
 
Buenas tardes

Tengo un sistema al cual he codificado durante ya casi 3 años y ahora que segun yo casi esta terminado me doy cuenta de lo siguiente.

Utilizo DBExpress con Firebird, no se hasta que punto sean compatible, esto debido a que si creo un proceso que importe informacion en el cual estoy haciendo un applyupdates y terminando una transaccion que tenia iniciada, en mi PC que es una PC digamos buena, todo trabaja bien, pero cuando ya realizo un proceso de migracion de 10000 o mas registros veo que Windows disminuye su numero de memoria paginada, esto al punto en que si la maquina tienen poco espacio en HD el sistema deja de comitar las transacciones y no se almacena la informacion.

Cuando empese a programar en la aplicacion probe el volumen, y no pasaba esto, pero siempre comitaba hasta el final de cargar todos los 10000 o 20000 registros.

Creo que mi error debe estar al comitar la transaccion, pero no se que se tienen que hacer en DBExpress para que la transaccion se libere y pueda iniciar otra, no se si alguien cuenta con un ejemplo de como almacenar datos con DBExpress y Firebird, ahorita estoy con el apuro ya que no se si hay alguien como yo que tenga aplicaciones en donde manejan volumen de datos y utilicen DBExpress si hay alguien que use DBExpress le agradeceria si me puedo poner en contacto para compartir tips del componente, me queda claro que no es firebird el que falla, porque puedo abrir la aplicacion N veces y crear datos simultaneamente.

Sin mas me despido y espero alguien cuente con informacion para compartir.

Paoti 26-05-2006 22:39:51

ciclo de transaccciones
 
Hola César.



No sé porque tengas esas clases de errores.


Pero prueba estó, dando por hecho que asi tengas el módulo de migración.



Código:

numREg <-- 1;
te conectas al dataset [DSOrigen](DB, archivo plano, xml)  donde deseas importar.
mientras no sea DS.Origen.eof
    numreg <--- numreg <--- 1
    DSDestino.insert;
    DsDEstino.FieldByname(X).AsValue := DsOrigen.FieldByname.Asvalue;
    DsDestino.post;
    SI numreg = 1000 (VALOR NO TAN CRITICO)
        DSDestino.close;
        TRASACCION.COMMIT;
        DSDestino.open;
        numreg <--- 0;
      FIN SI
      DSOrige.next
FIN MIENTRAS
DSDestino.close;
TRASACCION.COMMIT;


Si no, comentanos más el problmas que tienes, a lo mejor no estas haciendo commit, sino commitretaining y dejes muchas cosas abiertas.


La franja horaria es GMT +2. Ahora son las 09:30:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi