Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como se podría bloquear un registro (https://www.clubdelphi.com/foros/showthread.php?t=7466)

marcial 16-02-2004 20:37:03

Como se podría bloquear un registro
 
Hola a todos y gracias por anticipado.

Trabajo con D5 y tablas Paradox, es una aplicacion en red y mi problema con los bloqueos es el siguiente: La aplicacion tiene una primera pantalla donde saco un DBgrid con los registros de una tabla, y entre otros un boton de modificar datos.
Si hago doble clic en el dbgrid (consulta) o si hago un clic y botón modificar me pasa a la sagunda pantalla mostrandome los datos. Bien pues me gustaria que:

Si doy un clic en el registro "n" y pico el boton modificar, que cuando alguien desde otro puesto haga doble clic en el dbgrid en el registro "n" diga :"registro modificandose por el usuario xxxxx"; y si dos puestos hacen doble clic sobre el mismo registro que los deje visualizar la pantalla.

Es decir:
1) PC 1 DblClic registro 7 y PC 2 DblClic registro 7 = Pasa 2ªPantalla

2) PC 1 Btn Modificar 7 y PC 2 DblClic Reg.7 = Que diga "Registro modificandose por usuario xxxxxx" y no pasa 2ª pantalla

3) PC 1 Btn Modificar 7 y PC 2 BtnModificar 7 = Que diga "Registro bloqueado por usuario xxxxxx" y no pasa 2ª pantalla

He usado tres o cuatro funciones (en el OnEditError de la tabla, LockRecord, DbiIsRecordLocked, etc) y ninguna hace al 100% lo que quiero. El supuesto 1 y 3 si, pero el 2 no lo consigo). ¿Podría alguien echarme una mano con esto por favor?

Os vuelvo a dar a todos las gracias por intentarlo

Marcial

eduarcol 16-02-2004 22:26:36

Mira luego del doble click colocas a editar el registro, yo lo he hecho y seguro que funciona, yo lo hice de la siguiente forma
Código:

  try
      Table1.Edit
  except
      // Capturar el error si es de bloqueo manejarlo como se desea
  end;

al Darle click sobre el registro el Table1.Edit lo bloquea al otro usuario querer hacer lo mismo no va a poder editarlo porq ya esta en edicion y te va a dar la excepcion.

la clausula except no te lo coloco porq no la se de memoria pero investiga las excepciones que seguro que lo puedes hacer.

cualquier duda me preguntas

marcial 17-02-2004 11:21:28

Gracias por tu contestación, pero creo que no lo estoy haciendo bien porque hay algo que falla.

Si despues del dblclick en el dbgrid pongo un Table1.Edit, ya bloqueo ese registro y cuando otro puesto hace otro dblclik en ese registro dice que esta bloqueado. Se trata de saber cuando hago un dblclik (browse) si algun usuario pulso el boton de modificar desde otro puesto(ese si que hace un table1.edit).

Espero tus sugerencias.

Un saludo

eduarcol 17-02-2004 14:37:12

la unica forma que yo conozco de hacerlo es como te comente, lo que podrias hacer es lo siguiente:

Si le da click al boton modificar que el registro quede bloqueado.
si le da dobleclick al browser Edita el registro, de alli tienes dos condiciones:

1.- Si te da la excepciones decir que ya esta bloqueado, por lo tanto sacas la informacion que necesitas
2.- Si no te da la excepcion es porq esta libre, entonces lo desbloqueas de nuevo.

Es lo que sugiero fijate a ver si te sirve

marcial 17-02-2004 22:00:42

Muchas gracias por tu ayuda.....he aplicado tu sugerencia y me ha funcionado. Gracias por ayuda a los que sabemos menos


La franja horaria es GMT +2. Ahora son las 08:33:26.

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