Código Delphi
[-]
with TuQuery do begin
If Active then Close;
SQL.Clear;
SQL.Add('Insert into UnaTabla(campo1, Campo2)');
SQL.Add('Values( :Campo1, :Campo2)');
ParamByName('Campo1').AsString := UnEdit.Text;
ParamByName('Campo2').AsInteger := JediValidateEdit.AsInteger;
TuBaseDatos.StartTransaction;
Try
ExecSQL;
Except on E:Exception do begin
TuBaseDatos.Rollback;
Raise;
Exit;
end; End; TuBaseDatos.Commit;
If Active then Close;
SQL.Clear;
SQL.Add('Select * from TuTabla');
Open;
TuDBGrid.Refresh;
end;
Si te fijas, en caso de error, primero se hace el RollBack y luego se presenta el mensaje de error. Hay que tener cuidado con esto porque es muy común que primero muestran el mensaje de error y después hacen el rollback. El problema con eso, es que cuando a un usuario le aparece el mensaje de error, así lo deja en la pantalla hasta que alguien le explica cuál fue el problema, o incluso dejan el mensaje en pantalla y se van a comer. Y al dejar el mensaje en la pantalla, el rollback nunca se ejecuta y dejan la transacción activa, ocasionando que el sistema se bloquee. Por eso es importante hacer primero el rollback y después mostrar el mensaje.