PDA

Ver la Versión Completa : Cómo controlar múltiples transacciones? (Interbase/Firebird)


xaguilars
03-04-2008, 13:31:44
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


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


procedure TfrmModulo.actGuardarExecute(Sender: TObject);
begin
DM.Guardar(Self)
end;

xaguilars
03-04-2008, 20:35:02
Muchas gracias era lo que necesitaba.

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 [-] (http://www.clubdelphi.com/foros/#)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 [-] (http://www.clubdelphi.com/foros/#)procedure TfrmModulo.actGuardarExecute(Sender: TObject);
begin DM.Guardar(Self) end;