Ver Mensaje Individual
  #6  
Antiguo 04-09-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Reputación: 23
ContraVeneno Va por buen camino
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; //execpt
 End; //Try
 TuBaseDatos.Commit;

 If Active then Close;
 SQL.Clear;
 SQL.Add('Select * from TuTabla');
 Open;
 TuDBGrid.Refresh;
end; //with

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.
__________________


Última edición por ContraVeneno fecha: 04-09-2007 a las 16:48:03.
Responder Con Cita