Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2010-10

problema con zeos/firebird al agregar registros/cancelar edición

3 messages · 2 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Paola Bruccoleri

Hola a todos..

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

   Application.CreateForm(TEditF03, EditF03);
   dbForm03.Append;
   dbForm03.FieldByName('NUMERO').AsInteger             := 99999 ;
   dbForm03.FieldByName('FECHA').AsDateTime             := Now ;
.....
   try
     EditF03.ShowModal;
   finally
     FreeAndNil(EditF03);
   end;

El form de edici�n tiene componentes rxdbxxxxx (calcedit, timeedit, lookupcombo...) y se carga correctamente.
Ahora, si apreto un bot�n CANCELAR, para cancelar esa edici�n, donde ejecuto esto:

   ABMF03.dbForm03.CancelUpdates;
   DMPrincipal.ServiamConnectionDB.Rollback;
   Close;

por tanto regreso al grid nuevamente.
Si intento agregar un nuevo registro, me sale este error:

lo MISMO me pasa si grabo el registro e intento agregar uno nuevo.

En el bot�n AGREGAR, hago esto:

      Try
        If ABMF03.DSForm_03.DataSet.Modified then
           Begin
           ABMF03.dbForm03.Post;
           ABMF03.dbForm03.ApplyUpdates;
           DMPrincipal.ServiamConnectionDB.Commit;
           end
        Else
           Begin
           ABMF03.dbForm03.CancelUpdates;
           DMPrincipal.ServiamConnectionDB.Rollback;
           end;
      Except
      ABMF03.dbForm03.CancelUpdates;
      DMPrincipal.ServiamConnectionDB.Rollback;
      MessageDlg('��� Atenci�n...!!!', 'N�mero de comprobante ya
ingresado', mtWarning, [mbOk], 0);
      end;

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

Agradezco alguna pista..

Si, ya s� que puedo usar componentes auxiliares para cargar los datos y luego hacer el INSERT, pero me gustar�a resolverlo de esta manera, que si funciona, es muy pr�ctico
muchas gracias
chauuuuuuuuuuuuuu

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20101013/6568cfaa/attachment.html> ------------ pr�xima parte ------------
A non-text attachment was scrubbed...
Name: moz-screenshot-3.png
Type: image/png
Size: 9730 bytes
Desc: no disponible
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20101013/6568cfaa/attachment.png>

Reply by email

José Mejuto
to Paola Bruccoleri

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�

Reply by email

Paola Bruccoleri
to José Mejuto

El 13/10/2010 04:53 p.m., Jos� Mejuto escribi�:

Show quoted text 12 lines
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.

Hola Jos�..
tendr� en cuenta lo que me dices, aunque creo que todo este merequetengue tiene que ver con un bug:
http://zeosbugs.firmos.at/view.php?id=200

y al parecer, en la ver. 6.6.6 no pasa..
voy a ver si hago un proyecto simple para reproducirlo as� lo reporto.. chauuuuuuuuuuuu

Reply by email