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