![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Bloqueo de registros
Estimados, tengo la siguiente duda y consulta sobre como bloquear un registro directamente sobre la tabla la cual tiene un solo registro y un solo campo por lo que no le veo el sentido de hacerlo por sql.
Mi primer intento fue hacer algo similar a esto.
Ahora por lo que yo entiendo y es poco, con estas lineas el sistema intentara bloquear el registro con la propiedad Edit , asignar el valor y finalmente grabar el mismo haciendo el Post. Pero que pasa si el registro se esta intentando modificar en otra estacion de trabajo ? Asumo que no va a poder hacer el edit, ( y como no tengo excepciones , generara un error , correcto ?? ). Todavia no manejo bien el tema de los try, except, finalyy. etc. etc.. Como puedo modificar este codigo para que de alguna manera entre en loop hasta que pueda modificarlo. Yo SE que no se debe hacer ( por los factores que todos conocemos ), pero es fundamental para mi sistema que pueda hacerse, o sea que siga intentando grabar el registro hasta que se logre. Gracias mil. Saludos. |
#2
|
||||
|
||||
Pero eso depende de que BD estes usando y de como tengas configuradas las transacciones
Hay RDBMS que implementan bloqueo por tabla, por fila, por registro, etc Luego esta el modo en el que trabajan las transacciones. Sobre todo la propiedad IsolationLevel (Aislamiento) Tampoco llego a ver porque seria necesario implementar todo eso, aparentemente por el codigo que expones ahi mismo en un mismo metodo haces el edit y el post. Es decir que demoraria unos cuantos milisegundos. Luego si llegan varias peticiones es trabajo de gestor de la bd el como procesarlas (es probable que en el otro cliente te tire el error de que el ultimo valor de la fila que conocias fue modificado y debas hacer un refresh o requery) Luego tenes la opcin de usar ClientDataSet y mandar a aplicar los deltas,y que se encarge de hacer el trabajo sucio la bd Si lo que queres realmente es bloquear hasta que se escribe, podes poner un boton1 y en su evento poner en edicion al DataSet (.Edit) y luego tener otro boton2 para hacer el .Post. Si le dan al .edit, hasta que no hagan .post o bien un .cancel con otro boton, la tabla esta en edicion con respecto al try..finally, se intenta ejecutar lo que esta en el bloque del try, si hay una excepcion salta directamente al except y ejecuta lo del finally; ademas, el bloque del finally se ejecuta SIEMPRE. Es decir en tu caso, si no puede poner la tabla en modo de edicion y eso genera una excepcion, entonces ejecuta el .post Última edición por ecfisa fecha: 05-03-2015 a las 19:29:46. |
#3
|
||||
|
||||
Imprescindible: La cara oculta de Delphi.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
||||
|
||||
Siempre puedes "meter" ese código dentro de un bucle para que lo reintente 2 o 3 veces, con un lapso de tiempo entre medio.
Me parece algo muy extraño y no veo que esta sea la manera de resolverlo. Es decir, creo que el problema puede estar en otro sitio.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Bloqueo de Registros | pelaorb68 | Conexión con bases de datos | 5 | 11-05-2006 00:00:57 |
Bloqueo De Registros | pepeus | SQL | 2 | 01-02-2006 18:04:12 |
Bloqueo de registros | Duc | SQL | 1 | 08-07-2005 17:25:13 |
Bloqueo de Registros | Lix | Oracle | 1 | 02-03-2004 07:18:56 |
bloqueo de registros | barrene | Conexión con bases de datos | 1 | 29-07-2003 11:36:14 |
![]() |
|