Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Dos aplicaciones modificando el mismo registro ... (https://www.clubdelphi.com/foros/showthread.php?t=48502)

ArdiIIa 26-09-2007 18:55:15

Cita:

Empezado por seoane (Mensaje 234044)
Si, soy humano :( ( ya te pillare preguntando sobre la API :p)

¿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.

Supongo que te refieres a que cuando el usuario graba (post), capturas el error y haces lo demás...

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...:D:D

seoane 26-09-2007 19:00:18

Cita:

Empezado por ArdiIIa (Mensaje 234046)
Supongo que te refieres a que cuando el usuario graba (post), capturas el error y haces lo demás...

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...:D:D

Son registros pequeños, con unos pocos campos ¿te parece mal la idea? :confused:

ArdiIIa 26-09-2007 19:04:58

Cita:

Empezado por seoane (Mensaje 234050)
Son registros pequeños, con unos pocos campos ¿te parece mal la idea? :confused:

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...

seoane 26-09-2007 19:07:56

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? :confused:

ArdiIIa 26-09-2007 19:08:01

Por cierto, ya sería mucha casualidad que el servicio borrara el registro que el usuario está modificando, no ?

ArdiIIa 26-09-2007 19:08:58

Cita:

Empezado por seoane (Mensaje 234060)
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? :confused:

Exacto, eso quiero decir.
Que te asegures que el registro a modificar, existe en la BD

Casimiro Notevi 26-09-2007 19:22:46

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.

seoane 26-09-2007 19:47:15

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

Caral 26-09-2007 20:02:46

Hola
Pregunto IB, no permite transacciones?
Código Delphi [-]
 DataModule1.AC1.BeginTrans;
// lo que se va ha hacer
DataModule1.AC1.CommitTrans;
//y si hay algun problema se crea una Exception
on E:Exception do DataModule1.AC1.RollbackTrans;
En ese orden.
Solo pregunto, porque cuando se hacen este tipo de cosas, se pueden perder datos, me parece.
Saludos

paldave 26-09-2007 20:13:57

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.

Neftali [Germán.Estévez] 27-09-2007 11:12:49

Cita:

Empezado por seoane (Mensaje 234090)
- 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.

Bueno, llego tarde...:(:(

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í.

seoane 27-09-2007 12:32:28

Cita:

Empezado por Neftali (Mensaje 234263)
Bueno, llego tarde...:(

De ningún modo, como ya dije, en estas labores soy un novato y cuantas mas opiniones tenga de gente con experiencia mejor.

El problema mas grave era que el servicio borraba registros, y el usuario no lo sabia e intentaba modificarlos. Así que ahora antes de modificar nada, compruebo que el registro sigue ahí (de hecho actualizo los datos), y parece que con eso es suficiente por ahora.

Muchas gracias


La franja horaria es GMT +2. Ahora son las 01:35:35.

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