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
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;
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.