REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE

REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE

Postby joseluisysturiz » Sun Jul 24, 2022 8: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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE

Postby cmsoft » 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: Select all  Expand view  RUN
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: Select all  Expand view  RUN

     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: Select all  Expand view  RUN
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: Select all  Expand view  RUN

// 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
User avatar
cmsoft
 
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE

Postby joseluisysturiz » 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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE

Postby VictorCasajuana » Mon Jul 25, 2022 2: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 ?
User avatar
VictorCasajuana
 
Posts: 268
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE

Postby cmsoft » Mon Jul 25, 2022 2: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
User avatar
cmsoft
 
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: REFRESCAR BROWSE Y CONSULTA SQL AUTOMATICAMENTE

Postby VictorCasajuana » Thu Jul 28, 2022 7: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 ?
User avatar
VictorCasajuana
 
Posts: 268
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 105 guests