FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Cita:
En la base tengo: LOCK_TIMEOT =3000 Las aplicaciones bloquean registros mediante un stored procedure. Supongamos dos instancias de la aplicacion. La primera bloquea el registro y comienza a editarlo. Cuando la 2da intenta bloquear el mismo reg que en la 1ra instancia se produce una excepción. Teoricamente el código NativeError es 1222. Mi problema es que al capturar la excepción la transacción todavia sigue activa, pero al salir del try except ya no. ==> Aqui esta el procedimiento en donde se captura la excepción: procedure TForm1.btnEditarClick(Sender: TObject); begin //Llama a editar un registro with qryModif do begin close; ParamByName('pID').Value:=catCalif.fieldByName('ID').value; ParamByName('pActualiza').Value:=1; try open; except on E:EDatabaseError do begin ManejarErrorBloqueo(qryModif,E); MessageDlg('El registro que desea editar, está siendo util'+ 'izado por otro usuario. '+#13+#10+'Por favor i'+ 'ntente la operación nuevamente mas tarde.', mtError, [mbOK], 0); end; end; end; end; La transacción fue iniciada antes, y lo que necesito es que apesar del error de bloqueo ésta continue viva.
__________________
Marcos |
#2
|
|||
|
|||
Y en la función ManejarErrorBloqueo haces algo con la base de datos ?
|
#3
|
|||
|
|||
Procedure TForm1.ManejarErrorBloqueo(Dataset:TDataset;E:EDatabaseError);
var I: Integer; x: String; begin if Database1.InTransaction then MessageDlg('Todavia estoy en la transaccion', mtWarning, [mbOK], 0); if E is EDBEngineError then with EDBEngineError(E) do for I := 0 to ErrorCount - 1 do if Errors[i].NativeError <> 0 then begin X := X+inttostr(Errors[i].NativeError)+#13+#10; Exit; end; MessageDlg(''+X, mtError, [mbOK], 0); end; El messageDlg que me informa que todavia estoy dentro de la transaccion me lo muestra, osea que alli todavia está la transacción en funcionamiento. Despues de mostrar los errores, hago un rollback y me da este error: No user transaction is currently in progress. ...
__________________
Marcos |
#4
|
|||
|
|||
Es como si al haber un error te hiciera automaticamente un rollback o un commit (esto último poco probable) por default.
Tal vez este seteado así en los componentes de base de datos, cuales usas ? |
#5
|
|||
|
|||
TDatabase para la conexion
TQuery... BDE
__________________
Marcos |
#6
|
|||
|
|||
La propiedad KeepConnection del TDatabase está en True ?
|
#7
|
|||
|
|||
Si está en true
Aparentemente la instancia de TDabase1 permance dentro de la transaccion fuera del try except donde capturo el error. (ya que hago un Database1.Intransaction y me da true). Pero si hago un commit o un rollback me da el error de que no tengo transaccion activa.
__________________
Marcos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema con transaccion con IB | reina | Varios | 2 | 03-09-2005 02:40:11 |
Urgente - problema de insertar en tabla - Transaccion Activa | Patricio | Conexión con bases de datos | 2 | 27-06-2005 16:29:06 |
Confilcto en Transaccion | muli | Firebird e Interbase | 2 | 24-09-2004 16:33:26 |
Transaccion | Esau | SQL | 1 | 14-01-2004 10:00:34 |
La vista de una transacción | Newbie | Firebird e Interbase | 1 | 08-09-2003 09:35:47 |
|