Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-03-2015
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 21
lbidi Va por buen camino
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.

Código Delphi [-]
    try
        Tbl_Examenes.Edit;
        Tbl_Examenes.FieldByName('Valor').AsString := edt_Hallado.Text;
    finally
        Tbl_Examenes.Post;

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.
Responder Con Cita
  #2  
Antiguo 05-03-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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.
Responder Con Cita
  #3  
Antiguo 05-03-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Imprescindible: La cara oculta de Delphi.
Responder Con Cita
  #4  
Antiguo 06-03-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
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

Temas Similares
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


La franja horaria es GMT +2. Ahora son las 12:14:30.


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