Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-07-2021
isracdc isracdc is offline
Miembro
 
Registrado: nov 2015
Posts: 24
Poder: 0
isracdc Va por buen camino
Refrescar tabla o consulta en LAN

Saludos a todos, soy yo de nuevo XD.
Verán, estaba haciendo algunas pruebas con MySQL y C++Builder uso 10.3.
Tengo una aplicación que corre perfectamente en PC1 por ejemplo, la misma la llevé a otra PC2, la BD está alojada en la PC1 y por ODBC desde ambas aplicaciones se conectan correctamente a la BD en PC1, están en la misma red local.
Mi duda es la sgte: al utilizar la app en PC1 y por ejemplo aumentar stock de un producto, el aumento no se ve reflejado en la PC2 (por ejemplo si estoy mostrando la info en un DBGrid) y tampoco viceversa, si modifico algo desde la PC2, no se refleja en la app de la PC1. Qué debería hacer para "refrescar" esa información, ya sea tabla o consulta en la otra aplicación que está utilizando la misma aplicación en otro ordenador? He utilizado los componentes ADO para todo. Gracias de antemano a sus respuestas que me están ayudando bastante.
Responder Con Cita
  #2  
Antiguo 22-07-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si es un dbgrid, puedes poner el botón "refrescar", es lo más simple.
Si dejan abierto ese form con el dbgrid durante varias horas o días, por decir algo, lo normal sería refrescar para ver los datos actualizados.
Con algunas BD como firebird existen los eventos que puedes controlar para estos temas, pero desconozco si con mysql es posible.
También puedes añadir un timer que ejecute el refresh cada ¿una hora?
Aunque todo depende de la importancia que tenga el mostrar esos datos actualizados en un dbgrid dejado abierto.
Responder Con Cita
  #3  
Antiguo 23-07-2021
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.269
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
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Con algunas BD como firebird existen los eventos que puedes controlar para estos temas, pero desconozco si con mysql es posible.

Lo que comenta [Casimiro] son los "Query Notifications" que tienen algunas BBDD.
Para acceder a ellos tienes un componente de FireDAC llamado TFDEventAlerter (http://docwiki.embarcadero.com/RADSt...lerts_(FireDAC)).

Aunque en la documentación no aparece MySQL. O porque la BBDD no soporta las notificaciones o porque FireDAC no lo tiene implementado para MySQL.
__________________
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
  #4  
Antiguo 23-07-2021
isracdc isracdc is offline
Miembro
 
Registrado: nov 2015
Posts: 24
Poder: 0
isracdc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Si es un dbgrid, puedes poner el botón "refrescar", es lo más simple.
Si dejan abierto ese form con el dbgrid durante varias horas o días, por decir algo, lo normal sería refrescar para ver los datos actualizados.
Aunque todo depende de la importancia que tenga el mostrar esos datos actualizados en un dbgrid dejado abierto.
La idea es para un inventario, me pusieron el caso de que una PC está en caja y la otra se encuentra en un depósito, al momento de aumentar productos en depósito, que ese aumento se vea reflejado (mucho mejor si es al instante) en la aplicación que también estaría abierta en la PC de caja. Lo del Timer puede ser una opción, pero en algunos casos consume recursos tenerlo abierto bastante tiempo, porque aparte de necesitar "refrescar" la información sería constante, tanto para aumentar inventario, como para hacer una venta(que reduce inventario).
Nunca he utilizado los componentes de FireDAC
Responder Con Cita
  #5  
Antiguo 23-07-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por lo que me ha parecido entender, creo que es innecesario lo que pretendes hacer.

¿Acaso tienes en pantalla, al mismo tiempo, todos los artículos existentes, y hay alguien mirando esa pantalla para ver si aumentan o disminuyen las existencias?
Responder Con Cita
  #6  
Antiguo 23-07-2021
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por isracdc Ver Mensaje
Mi duda es la sgte: al utilizar la app en PC1 y por ejemplo aumentar stock de un producto, el aumento no se ve reflejado en la PC2 (por ejemplo si estoy mostrando la info en un DBGrid) y tampoco viceversa, si modifico algo desde la PC2, no se refleja en la app de la PC1.
Apuesto es porque fundamentalmente no entiendes como usar un RDBMS de servidor. A diferencia de BD de archivos, NO se supone que mantengas "viva" la consultas/tablas desde que inicias la app hasta que terminas.

En CADA ocasión que vas a mostrar datos, DEBES re-consultar la BD. Es incluye si vas de un registro a otro en un flujo de edición. Asi que deberías tener un contante "Query.Open, Query.Close" cada vez que vas fluyendo.

Unicamente tiene algo de sentido mantener la CONEXION abierta, o usar un pool de conexiones y en cada query abrir de nuevo la conexión. Idealmente:

Código Delphi [-]
function query_xxx(...) -> TClientDataset
begin
     con := Db.open() //de un pool para que sea eficiente!
     query.execute(con)
     //Aqui ya no hay ni query ni con abierto
end

Un BD remota se supone que se acceda de esta forma. Recuerda que estas dentro de una BD transaccional y las transacciones deben ser CORTAS, de solo segundos de estar abiertas.

---

Y en caso de lo que dices, hacer polling no es algo que deberías preocuparte a menos que tengas CIENTOS de "escuchas" a la vez.
__________________
El malabarista.
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
TClientDataSet - Refrescar Parte de la Tabla LEVV Conexión con bases de datos 2 13-04-2012 17:21:16
refrescar la tabla ebeltete Firebird e Interbase 1 08-03-2008 15:58:54
Refrescar tabla y consulta carlosegs11 SQL 11 08-05-2007 19:40:53
Actualizar o Refrescar una Tabla Caral Tablas planas 2 20-02-2007 20:12:17
Refrescar consulta negama SQL 2 05-09-2003 15:45:39


La franja horaria es GMT +2. Ahora son las 06:27: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
Copyright 1996-2007 Club Delphi