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 controlar múltiples transacciones? (Interbase/Firebird) (https://www.clubdelphi.com/foros/showthread.php?t=54939)

xaguilars 03-04-2008 13:31:44

Cómo controlar múltiples transacciones? (Interbase/Firebird)
 
Hola estoy usando el componente TDatabase para conectarme a una BDD Firebird y quisiera saber si es posible controlar varias transacciones a la vez.

De momento sólo estoy usando StartTransaction, Commit y Rollback pero no me basta ya que por ejemplo quiero que cuando se abra un formulario, se cree una nueva transacción sólo para ese formulario y cuando haga el Commit o el Rollback sólo le afecte a los cambios que se han hecho en esa nueva transacción.
Espero haber sabido explicarme bien.

Gracias

Lepe 03-04-2008 14:23:14

Segun comentas, poniendo un objeto transaction en esa ventana determinada y configurando todos los datasets de esa ventana a ese transaction, todo debería funcionar correctamente.

Saludos

axesys 03-04-2008 19:12:42

Yo lo hago por medio de esta función en el datamodulo a la que le envío como parametro el form

Código Delphi [-]
procedure TDM.Guardar(frmForma: TForm);
var
  i: integer;
  iTamanioArreglo: Integer;
  dsArreglo: array of TDataSource;
begin
  iTamanioArreglo := 0;
  for i:= 0 to Pred(frmForma.ComponentCount) do
    if frmForma.Components[i] is TDataSource then
    begin
      Inc(iTamanioArreglo);
      SetLength(dsArreglo, iTamanioArreglo);
      dsArreglo[Pred(iTamanioArreglo)] := TDataSource(frmForma.Components[i]);
    end;
  with TransaccionEscritura do
  try
    if not InTransaction then
      StartTransaction;
    for i := 0 to High(dsArreglo) do
      dsArreglo[i].DataSet.Post;
    CommitRetaining;
  except
    RollbackRetaining;
    raise
  end;
end;

En mi form al momento de llamar el action que guarda ejecuto

Código Delphi [-]
procedure TfrmModulo.actGuardarExecute(Sender: TObject);
begin
  DM.Guardar(Self)
end;

xaguilars 03-04-2008 20:35:02

Muchas gracias era lo que necesitaba.

Cita:

Empezado por axesys (Mensaje 277355)
Yo lo hago por medio de esta función en el datamodulo a la que le envío como parametro el form

Código Delphi [-]procedure TDM.Guardar(frmForma: TForm);
var i: integer; iTamanioArreglo: Integer; dsArreglo: array of TDataSource;
begin iTamanioArreglo := 0; for i:= 0 to Pred(frmForma.ComponentCount) do if frmForma.Components[i] is TDataSource then begin Inc(iTamanioArreglo); SetLength(dsArreglo, iTamanioArreglo); dsArreglo[Pred(iTamanioArreglo)] := TDataSource(frmForma.Components[i]); end;
with TransaccionEscritura do try if not InTransaction then StartTransaction; for i := 0 to High(dsArreglo) do dsArreglo[i].DataSet.Post; CommitRetaining; except RollbackRetaining; raise end;
end;


En mi form al momento de llamar el action que guarda ejecuto

Código Delphi [-]procedure TfrmModulo.actGuardarExecute(Sender: TObject);
begin DM.Guardar(Self) end;



La franja horaria es GMT +2. Ahora son las 05:02:17.

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