FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE
Posted: Sun Jul 24, 2022 08:09 PM

Saludos, tengo un sistema en red de atencion al cliente y varios operadores usan un modulo simultáneamente, necesito que si entra una informacion por una estacion, de forma automatica y cada tiempo determinado (segundos), se refresque en cada estaion para mostrar los datos incluidos en las otras estaciones, cuando un usuario carga una data y sale al maestro de datos (un browse), se actualiza, pero se necesita que sin hacer eso, se mantengan todas las pc con el mismo modulo abierto y se muestre la misma data en cada uno, que no haya que refrescar manualmente, espero hacerme entender, no se si con un temporizador que ejecute cada X segundos un refresh a la consulta SQL (query) y al browse...gracias... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE
Posted: Sun Jul 24, 2022 10:41 PM
José Luis:
Yo uso esta forma:
Identifico al ingresar al programa, la placa de red de la terminal que está accediendo
Code (fw): Select all Collapse
oApp:cID :=  GetNetCardInfo()[1,1]

Este código generalmente no cambia (suele hacerlo, pero cambia menos que la IP de la terminal)
Luego tengo una tabla que contiene si debo actualizar esa terminal. Dicha tabla tiene 2 campos, el ID de la terminal, y una variable lógica si debo actualizarla
Ya en el módulo que contiene el Browse y la Query que comparten las terminales hago
Code (fw): Select all Collapse
     REDEFINE XBROWSE oBrw DATASOURCE oQry ......
     DEFINE TIMER oTimer INTERVAL 2000 ACTION ActualizarTerminal() OF oWnd1 // Cada 2 segundos
     ACTIVATE DIALOG oDlg CENTER NOWAIT 
     ACTIVATE WINDOW oWnd1 ON INIT oTimer:Activate

Y la función que se encaga de actualizar es
Code (fw): Select all Collapse
STATIC FUNCTION ActualizarTerminal()
  IF oServer:Query("SELECT actualizar FROM punto_de_venta WHERE id = "+ClipValue2Sql(oApp:cID)):actualizar
     oQry:Refresh()
     oBrw:Refresh()
     oServer:Execute("UPDATE punto_de_venta SET actualizar = FALSE WHERE id = "+ClipValue2Sql(oApp:cID))
  ENDIF
RETURN nil

De esta manera, solo se actualiza el browse y la query cuando realmente hay un cambio, y no cada 2 segundos, evitando así el parpadeo del browse
Como extra, tienes que actualizar la tabla cada vez que haces un cambio que deba verse reflejado en las otras terminales que no actualizaron la tabla compartida
Code (fw): Select all Collapse
// Despues de graba un nuevo registro o modificarlo o eliminarlo, indicas así que las otras terminales deben actualizar
oServer:Execute("UPDATE  punto_de_venta  SET actualizar= TRUE WHERE id <> "+ClipValue2Sql(oApp:cID))

Esta es la forma que yo encontré, no se si será la más óptima pero funciona.
Está hecha con la clase TDolphin, no se si la clase nativa de Fivewn tendrá alguna opción más adecuada
Espero te sirva
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE
Posted: Sun Jul 24, 2022 11:14 PM

cmsof probare tu opcion, te comento que la data se agrega muy seguidamente durante el dia, en las noches es que baja un poco el ritmo, y a veces un usuario le dice a otro que cargo X datos, y necseito que el usuario del otro terminal lo vea sin necesidad de actualizar, por eso pense en los de cada X segundos, gracias...

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE
Posted: Mon Jul 25, 2022 02:29 PM

Puedes utilizar sockets para avisar a los terminales cuando se actualiza la data, de esta forma cuando un terminal actualice el resto actualizará el browse inmediatamente, y eso sólo ocurrirá cuando algún terminal actualice, ahorrando muchas consultas innecesarias a la base de datos.
puede que para hacer esto te toque utilizar también el multihilo, pero eso ya dependerá de como quieras aplicar la lógica y el enfoque.

salud!

--------

¿ Y porque no ?

¿ And why not ?
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE
Posted: Mon Jul 25, 2022 02:41 PM

Victor, tienes algún ejemplo simple para mostrar?
Me interesa mucho, porque es verdad, de la forma que yo lo hago hago muchas consultas que el 95% de las veces son innesesarias

Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE
Posted: Thu Jul 28, 2022 07:51 AM
cmsoft wrote:Victor, tienes algún ejemplo simple para mostrar?
Me interesa mucho, porque es verdad, de la forma que yo lo hago hago muchas consultas que el 95% de las veces son innesesarias


En \Samples tienes sockcli.prg y sockserv.prg para que puedas testear el funcionamiento de los sockets, a mí me sirvió mucho para poder implementarlos en una aplicación que hice para monitorizar servidores.

están basadas en la clase tsocket que la tienes en \source\classes

al principio cuesta un poco pillar la lógica de cuando el servidor está online, cuando conecta un cliente y como enviar la info, pero cuando la pillas los sockets te dan muchísima potencia.
--------

¿ Y porque no ?

¿ And why not ?

Continue the discussion