Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 31-05-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Firebird usa un modelo de bloqueos "optimista", por lo que un registro no será bloqueado con el simple hecho de comenzar su edición.

Podes simular un entorno de bloqueos "pesimista" haciendo lo que se conoce como una actualización en falso sobre el registro que te interesa, de manera que este sea efectivamente bloqueado.

Podrias, en el evento AfterEdit, por ejemplo, lanzar el siguiente query:

Código SQL [-]
  Update Tabla
    set campo = campo
  where llave = ValorLlave;

como ves, en realidad nada se cambiará en el registro (de alli el nombre de actualización en falso), sin embargo sobre este será puesto un bloqueo que se liberará con el próximo commit/rollback.

Si dejas las transacciones como nowait, te saltará una excepción inmediatamente trates de hacer esto, que ya será cosa de "atrapar" para realizar las acciones pertinentes, por ejemplo, no permitir la edición del registro.

algo como:

Código Delphi [-]
Procedure TDataModule1.TablaAfterUpdate(Parametros...);

Begin
  try
    LanzarActualizaciónEnFalso;
  except
    // dio error!
    Tabla.Cancel; // Evitamos que quede en modo de edición
    raise;  // lanzamos nuevamente el error para que se maneje afuera
  end;
end;

Desde mi punto de vista, con esto estas echando a perder una de las grandes ventajas de firebird (y de muchas de las bases de datos relacionales serias)... asi que te aconsejo pensarla otras dos veces y ver si mejor cambias tu forma de pensar para aprovechar esta gran característica.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:46:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi