Club Delphi  
    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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-08-2005
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
Question Como bloquear un registro!!!

Hola amigos del foro...

vuelvo otra vez. estoy realizando busquedas por medio de SELECT * FROM Ibquery... y me muestra todo en edit y hasta con foto, pero necesito que por jemplo en mi tabla de empleado cuando localice un nombre(un registro) se me bloquee para los demas usuarios, utilizo Ibquerys, IBdataset, las transaccion esta en Read Commint...

utilizo delphi 6 y firebir 1.0...

si nececitan mas datos me avisan por favor...
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #2  
Antiguo 12-08-2005
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
El bloqueo explicito de registros solo existe a partir de firebird 1.5, De todas formas te comento mi experiencia: En toda mi aplicación solo lo utilizo una vez en una de las pantallas de ABM y ya me dio problemas en dos instalaciones. Se queda marcado como bloqueado y la única forma de debloquearlo es desinstalando firebird y volviendo a instalarlo. No sé si esto pasa por algo que yo hago mal o es un problema de firebird.
Un saludo.
Responder Con Cita
  #3  
Antiguo 12-08-2005
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 21
Rufus Va por buen camino
Cita:
Empezado por CarlosHernandez
si nececitan mas datos me avisan por favor...
Pues sí, me gustaría saber si el bloqueo que quieres es de escritura (que los demás no puedan modificar el registro) o de lectura (que los demás no puedan leer el registro).

Aún así te digo:

En el caso de bloqueo de lectura, con el uso de la opción WITH LOCK, ya apicito comentó los problemas que pueden surgir.

Si es un bloqueo de escritura lanza un update falso sobre el registro, es decir actualizas un campo a su mismo valor, así ya queda marcado como modificado y, con los debidos parámetros de las transacciones, no es modificable por otros registros hasta que cierres su transacción.
__________________
Milo
Responder Con Cita
  #4  
Antiguo 12-08-2005
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
Cool Ejemplo...

Cita:
Empezado por Rufus
Si es un bloqueo de escritura lanza un update falso sobre el registro, es decir actualizas un campo a su mismo valor, así ya queda marcado como modificado y, con los debidos parámetros de las transacciones, no es modificable por otros registros hasta que cierres su transacción.
si es un bloqueo de escritura. y como podria hacer lo que me dices por favor me puedes dar un ejemplo....

sera realizando un campo de bloqueado y que lo lea antes de mostrar algo y se este modificando cada vez que se llame.... o algo asi .... no se lo estoy inventado...

ah por cierto nunca he trabajado con parametros en las transaccioness....
ejem por favorrrrrr......
gracias.
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #5  
Antiguo 12-08-2005
Avatar de kalimero
kalimero kalimero is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 288
Poder: 22
kalimero Va por buen camino
Hola
Yo trabajo con los componentes de acceso a Firebird FibPlus y el ploqueo de registro se hace:

<delphi>
if MiDataset.LockRecord(false) = lsSuccess then
begin
RegistroBloqueado:=true;
end;
</delphi>
Saludos
Responder Con Cita
  #6  
Antiguo 12-08-2005
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
Cita:
Empezado por kalimero

<delphi>
if MiDataset.LockRecord(false) = lsSuccess then
begin
RegistroBloqueado:=true;
end;
</delphi>
Saludos
Kalimero ya lo intente pero no lo reconoce me falta declarar algo en el unit???? y RegistroBloqueado???

agradecido............
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #7  
Antiguo 12-08-2005
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 21
Rufus Va por buen camino
Ejemplo general (luego tu lo adaptas):

-- Tengo un IBQUERY donde lanzo la consulta (SELECT * FROM TABLA WHERE...)
-- Pongo un IBSQL por ahí, para tareas auxiliares, que lo voy a usar para el update ficticio.
-- Cuando sucede el evento donde quieres que a partir de ahí se bloquee el registro, pones el codigo siguiente. Por ejemplo si tengo un BDGRID y al hacer doble click en una fila se abre la "ficha" del cliente para verlo. Puedo poner el codigo en el doble click de la fila o en el formshow del formulario que se abre, por ejemplo.
--Pongo el codigo:
Código:
IBSql1.SQL.Text := "UPDATE TABLA SET CAMPO1 = CAMPO1 WHERE ID=" + IBQuery1.FieldByName('ID').ASINTEGER;
 IBSql1.ExecQuery;
--Cuando el usuario termine de "ver" el registro, habrá que hacer un commit de la transacción para liberar el registro.
__________________
Milo

Última edición por Rufus fecha: 12-08-2005 a las 15:31:20.
Responder Con Cita
  #8  
Antiguo 12-08-2005
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
Cool Si me da...

Gracias rufu por la respuesta, pero otra cosita mas, como hago para identificar que el registro esta siendo utilizado por alguien mas y que le indique al segundo usuario(el que abre de segundo el mismo registro), y no hay manera de cambiar el mensaje de "dead lock no wait" no se uno hecho por mi que diga usuario no puede ser modificado o algo parecido.... osea identificar si la transaccion del otro equipo esta activa....
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
Respuesta



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 05:36:36.


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