[Lazarus-es] zeos-firebird: ejemplo transacciones
Claudio Romero
clauslack en gmail.com
Jue Mayo 6 21:22:42 CEST 2010
Esto es con SQLQuery, aunque con Zeos creo que es bastante parecido.
Sobre usar una transaccion con varios insert, update, un procedimiento
almacenado, aca va un ejemplo, con parambyname o sumando la string del
SQL.
***
try
GrabaCajaBases;
except
SQLTransaction3.Rollback;
raise;
end;
******
procedure TForm_ManejoCajaBonos.GrabaCajaBases;
if SQLTransaction3.active then SQLTransaction3.Commit;
SQLTransaction3.StartTransaction;
with SQLQuery2 do begin //aca estan los bonos con ident nomas
DisableControls;
First;
while not SQLQuery2.eof do begin
consulta:='insert into VTAEXPEN (E,I,F)';
consulta:=consulta+'VALUES(:E,:IDENT,:FECHA)';
SQLQuery3.close;
SQLQuery3.sql.clear;
SQLQuery3.Sql.add(consulta);
with SQLQuery3.params do begin
ParamByName('E').asstring:='I';
ParamByName('I').asstring:=FieldValues['ident'];
ParamByName('F').asdate:=fieldbyname('fecha_creacion').AsDateTime;
end;
SQLQuery3.ExecSQL;
//--
if diagnostico1<>'' then begin
SQLQuery3.close; SQLQuery3.sql.clear;
SQLQuery3.Sql.add('INSERT INTO
COMENTARIOS_BONO(USUARIO,FECHA_HORA,COMENTARIO,CLAVE_EXPENDIO,COD_USUARIO,ident)
VALUES('+QuotedStr(GnombreDeUsuario)+',current_timestamp,'+QuotedStr('Diag.1:'+diagnostico1)+','+FieldByName('clave_expendio').asstring+','+inttostr(GnroDeUsuario)+','+QuotedStr(FieldByName('ident').asstring)+')');
SQLQuery3.ExecSQL;
end;
//--
Next;
end;
end;
SQLQuery3.close;
SQLQuery3.sql.clear;
SQLQuery3.Sql.add('EXECUTE PROCEDURE
CIERRA_CAJA_BONOS('+IntToStr(GnroDeUsuario)+','+DBEtoco.text+')');
SQLQuery3.ExecSQL;
SQLTransaction3.Commit;//Con esto graba todo
end;
***********
Lo corte de un proyecto, solamente siguelo de ejemplo, pero hay 3
ExecSQL, que se ejecutan todos en la misma transacción, si falla algo,
falla TODO.
Saludos
More information about the Lazarus-es
mailing list