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)
-   -   Cómo controlo la Transaccion iniciada.. (https://www.clubdelphi.com/foros/showthread.php?t=64541)

ronimaxh 06-04-2009 21:38:38

Cómo controlo la Transaccion iniciada..
 
Hola amigo del clud, tengo una plicación que usa sql sever 2000 y la conexion es ado.

La pregunta es la siguiente si realizo una transacción y en el preceso ocurrre un error me da una excepcion y lo controlo con esto:

Código Delphi [-]
             frmdata.conexion.BeginTrans;
             iniciando el proceso.....
              try
              Post;
              frmdata.conexion.CommitTrans;
              limpia_comentario;
              Application.MessageBox('Guardado','Atención',+MB_ICONINFORMATION);
              except
              frmdata.conexion.RollbackTrans;
              Application.MessageBox('Transacción Cancelada','Atención',+MB_ICONERROR);
              end;

Nota:  cuando ocurre el frmdata.conexion.RollbackTrans;
aquí se mantiene la transacción y luego me dice que no se puede iniciar mas transacción en está sección, como cancelo la transacción iniciada.

duilioisola 07-04-2009 15:22:39

Supongo que el error se debe a que no inicias una nueva transacción.

Luego de un Commit o de un Rollback, la transacción queda "cerrada" y si quieres volver a hacer algo debes iniciar una nueva.

Yo utilizo algo como lo que sigue (con otros componentes)
Código Delphi [-]
var
   Q : TQuery;
begin
   Q := TQuery.Create(nil);
   with Q do
   begin
      DataBase := BaseDeDatos;
      Transaction := TransaccionLocal;

      {Primero me aseguro de que la transacción esté activa}
      if not Transaction.InTransaction then
         Transaction.StartTransaction;

      try
         ExecQuery;
         Transaction.Commit;
      except
         Transaction.Rollback;
      end;

      Free;
   end {with}
end;

ronimaxh 07-04-2009 18:19:02

gracias amigo por responder,
Código Delphi [-]
//con esto la inicio
frmdata.conexion.BeginTrans;


Esto si puedo hacer, gracias por el ejemplo.
Código Delphi [-]
 {Primero me aseguro de que la transacción esté activa}
      if not Transaction.InTransaction then
         Transaction.StartTransaction;


La franja horaria es GMT +2. Ahora son las 13:32:17.

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