![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
En el OnBeforePost del componente que utilizas (TIBTable) podrías verificar antes de grabar si los datos han cambiado.
- Select según la PK verificando que los demás datos sean iguales que los campos que tienes en la tabla. - Si devuelve EOF, se ha borrado el registro Si ya no existe --> Mensaje de error y refrescar la tabla o insertarlo nuevamente. Si ha cambiado algo --> Quizás mensaje diciendo que alguien ya lo ha tocado antes --> o No importa, se hace el post y el commit. |
|
#2
|
||||
|
||||
|
Personalmente, me parece mucho más facil que todo lo que estais comentando.
![]() En la llamada al procedimiento que modifique el registro, lo que haces es un Refresh de ese registro en concreto, con lo que en el momento de editar tendrás la última actualización que se haya realizado. Justo después del refresh puedes comprobar a su vez si fue borrado o no el registro, o por supuesto al hacer el refresh, entiendo que todos los 'dependientes' también se actualizarán. Ya otro tema sería si te interesan actualizaciones 'periódicas' de los datos que en ese momento muestres en pantalla. Pero entiendo que eso es un asunto diferente. Yo al menos me apaño muy bien con este método. ![]()
__________________
Piensa siempre en positivo ! |
|
#3
|
||||
|
||||
|
Seoane,
considero que enviar una señal al programa abierto no es una solución 100% efectiva, ya que pueden coincidir el borrado del servicio/refresco/borrado de la aplicación en el tiempo. Me gusta más la solución que te plantean anteriormente. Al borrar el registro, antes de realizar el borrado, comprobar que sigue existiendo. Si es así, se borra. Si no es así, sacar un mensaje de error para que lo vea el usuario diciendo "No se puede borrar porque ya no existe, los datos han caducado". o similar. Si además te planteas que puede ocurrir muy a menudo, puedes bloquear el registro, para que quien borre el registro no lo haga si está bloquedo por otro usuario y/o en otra transacción. Ya de esto te podrán aportar más datos los expertos en firebird, ya que no tengo experiencia al respecto. Porque nadie te asegura quién será el que borre el registros, el servicio o la aplicación. Espero haberte aportado algo. Suerte y un abrazo - sin dead, de abrazo mortal 'dead lock' ;-) PD: Vaya , gluglu se me adelantó
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
#4
|
||||
|
||||
|
Bueno, todo depende para lo que necesites, si necesitas que el usuario vea en tiempo "real" la manera como cambia dicha información el Post_event es una buena solución, pero si solo necesitas que el programa no deje tocar un registro que no existe porque se borro con el servicio que mencionaste, definitivamente las otras opciones son las mejores
.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
|
#5
|
||||
|
||||
|
... para una vez que pregunta un maestro y uno puede ayudar ...
![]()
__________________
Piensa siempre en positivo ! |
|
#6
|
||||
|
||||
|
gluglu tiene razón,
cuando uno puede ayudar a un maestro, duerme esa noche a pierna suelta, como más contento. Un abrazo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
#7
|
||||
|
||||
|
a mi me parecen valederas la dos soluciones cada una tiene pro y contras, la de jhonny con sus eventos se volveria ineficiente cuando hayan grandes cantidades de usuarios modificando la base de datos, estarias recibiendo mensajes cade segundo
la de gluglu y fjcg02 siempre y cuando los indices y la consulta este bien estructurada ya que si no tardarias un tiempo si la base de datos llega a crecer mucho
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
|
#8
|
||||
|
||||
|
Incredible
El Sr. Seoane es humano, y también pregunta... ![]() ![]() No había visto este hilo. La opción referida a Post_event, sería buena en el caso de que el servicio no hiciera muchos cambios, de otro modo, el programa del usuario/s estarían refrescando datos constantemente y podría interferir en el proceso normal de programa. A mi juicio, lo mas simple yeficaz habida cuenta de lo dicho, sería comprobar que el registro a modificar existe antes de proceder a esa modificación, ni mas ni menos, Tal vez con un query alternativo o temporal.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO |
|
#9
|
||||
|
||||
|
O escribo lento, o este hilo está que arde... según escribí entraron dos mensajes...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO |
|
#10
|
||||
|
||||
|
Cita:
![]() ![]()
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
|
#11
|
||||
|
||||
|
Yo también me inclino por comprobar antes si se ha modificado/eliminado el registro.
El post_event, en según qué condiciones, puede ser contraproducente. Edito: Tendrás que "ver" qué hay en el registro antes de editarlo por el usuario, por si se ha modificado, En caso de haberlo borrado el "otro" programa, no hay problema, dará error al intentar borrar algo que no existe, cuestión de controlarlo en un típico try except y presentarle el mensaje oportuno.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal Última edición por Casimiro Noteví fecha: 26-09-2007 a las 19:32:50. |
|
#12
|
||||
|
||||
|
Bueno, si nadie tiene objeciones lo voy a montar así:
- El usuario indica que quiere modificar un registro. - Compruebo los cambios en el registro, y si ha cambiado aviso al usuario. - Actualizo el registro. - Capturo los posibles errores, y si se producen, actualizo y le indico al usuario que lo vuelva a intentar. Muchas gracias a todos |
|
#13
|
||||
|
||||
|
Hola
Pregunto IB, no permite transacciones? En ese orden. Solo pregunto, porque cuando se hacen este tipo de cosas, se pueden perder datos, me parece. Saludos |
|
#14
|
||||
|
||||
|
Cita:
![]() ![]() En nuestro caso, utilizamos un par de campos extra en la tabla para comprobar los cambios. TimeStamp y UserUpdate, que permiten saber si se ha modificado desde la última lectura y quien lo ha hecho. Realizamos la consulta antes de actualizar para comprbar si los valores de memoria son iguales a los de la tabla. Lectura y actualización en la misma transacción. Creo que algo habíamos hablado aquí, aquí y aquí.
__________________
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. |
|
#15
|
||||
|
||||
|
Se me ocurre que podrían abrirse las tablas con la propiedad Exclusive = True, mantenerlas cerradas y abrirlas solo cuando se vayan a modificar. Entonces el programa que no tiene prioridad para modificar las tablas (no sé cual de los 2 es) primero comprueba si ya están usándose, y si es así intenta más tarde, cuando el que tiene prioridad haya terminado de hacer los cambios y haya cerrado las tablas.
|
|
#16
|
||||
|
||||
|
Si, soy humano
( ya te pillare preguntando sobre la API )¿Que os parece esta idea? Cuando hago una modificación capturo el error que se produce, aviso al usuario y refresco los datos. Además coloco un botón que permita actualizar los datos, para que el usuario pueda obtener información actualizada cuando lo desee. |
|
#17
|
||||
|
||||
|
Cita:
y si es un registro grande, que el usuario se ha tomado media hora para modificarlo, luego le informas que todo su trabajo se ha ido al garete... ![]() ![]()
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO |
|
#18
|
||||
|
||||
|
Cita:
![]() |
|
#19
|
||||
|
||||
|
Que me va a parecer mal....
Pero al márgen del refresco de la tabla y bajo esas circunstancias, no te cuesta ningún trabajo meter un evento antes de modificar y que ese evento verifique que efectivamente ese registro existe en verdad. Desde ese evento haces un pequeño Query preguntando Select registro Where ID = al que el usuario quiere modificar Si existe, procedes si no existe le avisas y refrescas...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO |
|
#20
|
||||
|
||||
|
Entonces Ardilla, si te entiendo bien, sugieres que ademas de capturar el error realice una comprobacion antes de empezar para que el usuario no trabaje de mas ¿correcto?
![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| modificar un mismo registro en varias tablas | kryna | Conexión con bases de datos | 1 | 18-03-2005 16:00:34 |
| 2 Usuarios Sobre El Mismo Registro | AGAG4 | Conexión con bases de datos | 5 | 06-09-2004 16:47:36 |
| Usando el mismo Registro | AGAG4 | SQL | 0 | 17-08-2004 20:33:42 |
| Dos aplicaciones usando el mismo puerto | DarkByte | Internet | 6 | 28-06-2004 16:40:52 |
| repetir el mismo registro | empty | Impresión | 3 | 13-04-2004 16:54:19 |
|