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)
-   -   Transacciones DataSetProvider y ClientDataset (https://www.clubdelphi.com/foros/showthread.php?t=60458)

pablonill 02-10-2008 22:29:05

Transacciones DataSetProvider y ClientDataset
 
Hola, que tal, yo aqui de vuelta, les hago una pequeña y gran consulta.

Si bien los DataSetProviders generan las transacciones implicitamente, lo que necesito es saber como puedo hacer porque tengo dos tablas y necesito que se actualizen dentro de una transaccion, el tema es como puedo actualizar ambas tablas seguras y si da algun error poder hacer un rollback, espero que haber sido claro, muchas gracias.

pigu 02-10-2008 23:17:16

Transacciones
 
Hola pablonill:

Mira, si usas componentes Ado debes hacer asi:

Código Delphi [-]
procedure guardar;
var vError: integer;
begin
   try
      AdoConnection.BeginTrans;
      DatasetProviders.ApplyUpdates(ClientDataSet.Delta, 0, vError);
      AdoConnection.CommitTrans;
   except
   on E: Exception do
   begin
      AdoConnection.RollbackTrans;
      MessageBox(PChar(E.Message), 'Error al guardar', MB_OK + MB_ICONERROR)
   end;
end;

Espero te sirva de ayuda.

pablonill 10-10-2008 03:20:25

Muchisimas gracias maestro. Sos un grande.

Patricio 22-11-2008 14:57:23

y si fueran los componentes de interbase
 
hola te hago una consulta voy a empezar con delphi 7 y con Firebird 2.0 con los compoenentes de interbase q vienen por defecto, como seria el codigo q pusiste con los compoenetes ado pero con los componentes de interbase.
Se pueden usar esos componentes ado para la base firebird?

pablonill 22-11-2008 15:39:05

Hola, te comento que uso delphi 2009 no es el mismo procedimiento que para delphi 7. Pero te puede orientar.

Código Delphi [-]
var
  TD: TDBXTransaction;
begin
  try
    TD := DM.Conexion.BeginTransaction(TDBXIsolations.ReadCommitted);
 
    //Aqui todo el procedimiento de actualizacion de datos
   
   
    DM.Conexion.CommitFreeAndNil(TD);
 
    except

      On e:Exception do
      begin
        DM.Conexion.RollbackFreeAndNil(TD);
        raise;
      end;
end;

Espero que te sirva, saludos.


La franja horaria es GMT +2. Ahora son las 16:53:57.

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