Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por dec Ver Mensaje
¿cada cuánto tiempo el servicio puede modificar registros? ... ¿no bastaría en principio con que el programa del usuario mostrase (justamente, al ser mostrado) los registros, la información, recién actualizada?
El problema es que el servicio puede modificar los datos en cualquier momento, y el programa del usuario puede estar abierto durante bastante tiempo, así que se tendrían que refrescar los datos, pero ¿cada cuanto tiempo?. Y además, aunque refrescáramos los datos periódicamente, nadie nos asegura que estén actualizados en el momento en que los vayamos a utilizar
Responder Con Cita
  #2  
Antiguo 26-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.144
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sí... ya me suponía yo que mi idea era también de bombero... ¡torero! Pero aquí habrá quien le sepa tañer Domingo, ya verás, ya.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 26-09-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Gracias por contestar juanelo, ahora mismo uso los componentes TIBTable y TIBQuery. No hay problema para capturar el error, pero lo que todavía no he decidido es que hacer cuando se produce el error ¿refrescar los datos y avisar al usuario de que vuelva a intentarlo?
Responder Con Cita
  #4  
Antiguo 26-09-2007
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.087
Poder: 20
juanelo Va por buen camino
Mira,
Para el programa que tiene "interfaz con el usuario", pues lo mas recomendable es que le informes de la situacion (depende en realidad de la logica de negocios de tu app) pero ya tomada una desicion, es decir, imaginate que estas en programa de ventas y que en la pantalla de ventas te aparecen 10 unidades del articulo A, pero en el momento de llevar a cabo la venta (grabar) resulta que solo queda 5 y el cliente te esta solicitando 6, pues lo que yo haria es mandar un mensaje en donde le indico al usuario que no hay suficientes existencias para su orden (pero la desicion ya esta tomada, NO SE GRABO NADA DE LA FACTURA) y por supuesto le sugiero la nueva cantidad (refresco los datos). Ahora bien lo interesante viene en tu servicio, ya que este tiene que tomar las desiciones el solo, sin ayuda del usuario, lo mismo, esto depende de la logica de negocios que tengas.
PD: Puede usar ClientDataSet y DataSetProvider perfectamente con TIBQuery.
Saludos-
Responder Con Cita
  #5  
Antiguo 26-09-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 23
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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.
Responder Con Cita
  #6  
Antiguo 26-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 24
gluglu Va por buen camino
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 !
Responder Con Cita
  #7  
Antiguo 26-09-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
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 -
Responder Con Cita
  #8  
Antiguo 26-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
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/
Responder Con Cita
  #9  
Antiguo 26-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 24
gluglu Va por buen camino
... para una vez que pregunta un maestro y uno puede ayudar ...
__________________
Piensa siempre en positivo !
Responder Con Cita
  #10  
Antiguo 26-09-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
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 -
Responder Con Cita
  #11  
Antiguo 26-09-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 28
eduarcol Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 26-09-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
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
Responder Con Cita
  #13  
Antiguo 26-09-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
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
Responder Con Cita
  #14  
Antiguo 26-09-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 28
eduarcol Va por buen camino
Cita:
Empezado por ArdiIIa Ver Mensaje
O escribo lento, o este hilo está que arde... según escribí entraron dos mensajes...
Mira que me ha pasado lo mismo
__________________
...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
Responder Con Cita
  #15  
Antiguo 26-09-2007
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.693
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
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.

Última edición por Casimiro Noteví fecha: 26-09-2007 a las 19:32:50.
Responder Con Cita
  #16  
Antiguo 26-09-2007
Avatar de paldave
paldave paldave is offline
Miembro
 
Registrado: ago 2007
Ubicación: Uruguay
Posts: 148
Poder: 20
paldave Va por buen camino
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.
Responder Con Cita
  #17  
Antiguo 26-09-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por ArdiIIa Ver Mensaje
Incredible
El Sr. Seoane es humano, y también pregunta...
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.
Responder Con Cita
  #18  
Antiguo 26-09-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
Cita:
Empezado por seoane Ver Mensaje
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.
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...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #19  
Antiguo 26-09-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por ArdiIIa Ver Mensaje
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...
Son registros pequeños, con unos pocos campos ¿te parece mal la idea?
Responder Con Cita
  #20  
Antiguo 26-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por seoane Ver Mensaje
El problema es que el servicio puede modificar los datos en cualquier momento, y el programa del usuario puede estar abierto durante bastante tiempo, así que se tendrían que refrescar los datos, pero ¿cada cuanto tiempo?. Y además, aunque refrescáramos los datos periódicamente, nadie nos asegura que estén actualizados en el momento en que los vayamos a utilizar
Podrias usar el Post_event de FireBird, de esa manera cada que el servicio cambie o borre dicho registro en la BD, podras enviar una "Señal" a tu aplicación y refrescar los datos "inmediatamente".
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 17:37:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi