FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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... |
#2
|
||||
|
||||
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. |
#3
|
||||
|
||||
Cita:
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 |
#4
|
||||
|
||||
Ejemplo...
Cita:
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. |
#5
|
||||
|
||||
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 |
#6
|
||||
|
||||
Cita:
agradecido............ |
#7
|
||||
|
||||
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;
__________________
Milo Última edición por Rufus fecha: 12-08-2005 a las 15:31:20. |
#8
|
||||
|
||||
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....
|
|
|
|