[Lazarus-es] problema con zeos/firebird al agregar registros/cancelar edición

José Mejuto joshyfun en gmail.com
Mie Oct 13 21:53:29 CEST 2010


Hello Paola,

Wednesday, October 13, 2010, 8:44:54 PM, you wrote:

PB> tengo un grid asociado a una tabla, y en ese mismo form tengo los
PB> clasicos botones agregar, etc...
PB> al presionar agregar, hago esto:

No he podido seguir bien el flujo, los nombres son un poco "crípticos"
con tanto "03" por todos lados :) Además usas Zeos me imagino, así que
más dificil de seguir para mi.

Pero si he visto una cosa que no me gusta en el código y puede estar
mal, o no. Cuando te refieres a una conexión para realizar el commit
el rollback te refieres a ella directamente

DMPrincipal.ServiamConnectionDB.Rollback;

Cuando creo que sería mejor usar algo como (no recuerdo bien la
sintaxis):

ABMF03.dbForm03.CancelUpdates;
ABMF03.dbForm03.Database.Rollback;

Además un CancelUpdates o un ApplyUpdates creo que ya hace un rollback
o un commit. Esto provoca que si tienes otros objetos enganchados a
esa transacción/conexión el estado de estes quede "invalidado". A er
si me explico:

q1.sql:='Select * from T1';
q2.sql:='Select * from T2';
q1.database:=Con1;
q2.database:=Con1;
q1.open;
q2.open;
q1.rollback;
//
En este punto el estado de q2 es indeterminado, ya que el rollback de
q1 sobre la misma conexión invalida los datos de q2, pero los
controles relacionados no se "enteran".

Para aliviar este "problema" en mis programas yo tengo un
ConexionReadOnly sobre la cual lanzo todos los query "readonly" de
modo que nunca voy a tener que hacer un commit, ni rollback, y cuando
tengo que usar dos tablas editadas a la vez uso diferentes conexiones
para cada una. Creo que Zeos permite multiples transacciones por
conexión, así que debería de simplificar el tema.

PB> Obviamente, el try/except tampoco me funciona en el caso de que ingrese
PB> un numero ya existente. Esa tabla tiene una primary key en el campo número.
PB> Agradezco alguna pista..

El except no te funciona, por que el error lo muestra el IDE, si le
das a OK debería de ejecutarse el bloque de except.

No creo que te ayude en nada, pero a lo mejor te hace pensar en el
problema de otro modo.

-- 
Best regards,
 José





More information about the Lazarus-es mailing list