Edición en Red
Edición en Red
Hola Amigos,
El sistema en cuestión trabaja en red y pretendo que cuando se edita un registro en la pc1, si este está siendo editado a su vez en la pc2, en ambas pc's puedan verse _ que se realizan en tiempo real.
Obviamente que la edición se realiza sobre variables y estás son grabadas al registro previo rlock(). Me interesan que cuando sean grabadas, en la otra pc el dato sea actualizado en la variable correspondiente y se visualice en la pantalla.
Probé con un timer pero no funciona como quiero.
¿Hay algún modo de hacerlo?. Gracias.
Rolando
El sistema en cuestión trabaja en red y pretendo que cuando se edita un registro en la pc1, si este está siendo editado a su vez en la pc2, en ambas pc's puedan verse _ que se realizan en tiempo real.
Obviamente que la edición se realiza sobre variables y estás son grabadas al registro previo rlock(). Me interesan que cuando sean grabadas, en la otra pc el dato sea actualizado en la variable correspondiente y se visualice en la pantalla.
Probé con un timer pero no funciona como quiero.
¿Hay algún modo de hacerlo?. Gracias.
Rolando
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Edición en Red
Para que los demas usuarios puedan ver en pantalla (xbrowse u otro) un registro recién actualizado por otro, puedes mover el puntero utilizando Dbskip() ó DbSkip(-1), una vez grabado.rolando wrote:Hola Amigos,
El sistema en cuestión trabaja en red y pretendo que cuando se edita un registro en la pc1, si este está siendo editado a su vez en la pc2, en ambas pc's puedan verse _ que se realizan en tiempo real.
Obviamente que la edición se realiza sobre variables y estás son grabadas al registro previo rlock(). Me interesan que cuando sean grabadas, en la otra pc el dato sea actualizado en la variable correspondiente y se visualice en la pantalla.
Probé con un timer pero no funciona como quiero.
¿Hay algún modo de hacerlo?. Gracias.
Rolando
Saludos.
- Ricardo Ramirez E.
- Posts: 161
- Joined: Wed Jan 25, 2006 10:45 am
- Location: Praia - Cape Verde
- Contact:
Rolando...
Puedes usar la Clase TDatabase.. ella te crea "gratis" un array con los valores de _ :
para referirte a las campos
al referirte a _.. realmente estas interactuando con un array una data de la TDatabase
Para grabar
Para un append
Cuando navegas por la
La TDATABASE actualiza automáticamente ::aBuffer con el metodo ::Load() y con ello
oDbf:cCODIGO , oDbf:cNOME
se actualiza tambien...
Lo mejor de esto es que la TDATABASE controla los bloqueos en red por ti .... eso ayuda mucho....
Revisa los ejemplos
\samples\dbf01
\samples\dbf03
Revisando el codigo fuente de la classe veras tambien como trabaja.. realmente es genial
Espero poder haberte ayudado
Puedes usar la Clase TDatabase.. ella te crea "gratis" un array con los valores de _ :
Code: Select all
Use Test SHARED
DATABASE oDbf // aqui creas el objeto TDATABASE
Code: Select all
oDbf:cCODIGO := "00001"
oDbf:cNOME := "TU NOMBRES"
Code: Select all
::aBuffer[ 1 ]
::aBuffer[ 2 ]
.
::aBuffer[n] //esto segun _ que tengas
Code: Select all
::oDbf:Save()
Code: Select all
::oDbf:Append()
Code: Select all
oDbf ::oDbf:Skip(), oDbf:Gotop(), oDbf:GoBottom()
oDbf:cCODIGO , oDbf:cNOME
se actualiza tambien...
Lo mejor de esto es que la TDATABASE controla los bloqueos en red por ti .... eso ayuda mucho....
Revisa los ejemplos
\samples\dbf01
\samples\dbf03
Revisando el codigo fuente de la classe veras tambien como trabaja.. realmente es genial
Espero poder haberte ayudado
Saludos
Ricardo R.
xHarbour 1.1.0 Simplex , Microsoft Visual Studio 2008, Bcc55, Fwh Build. 9.01
Ricardo R.
xHarbour 1.1.0 Simplex , Microsoft Visual Studio 2008, Bcc55, Fwh Build. 9.01
- jose_murugosa
- Posts: 943
- Joined: Mon Feb 06, 2006 4:28 pm
- Location: Uruguay
- Contact:
Cuidado!!rolando wrote:Ricardo,
Ya tengo todo armado usando Alias pero voy a estudiar lo que me indicas y trataré de ver como funciona.
Muchas gracias.
Rolando
Si en tu terminal estás haciendo cambios en "_ de un registro" y en otra hacen cambios en _ del mismo registro y los guardan, al efectuar el Load() con la tdatabase cargas los datos grabados en la otra terminal, pero pierdes _ que tu realizaste, ya que se carga a las variables intermedias TODOS _ DEL REGISTRO y por lo tanto se reemplaza lo que hayas escrito por el contenido del registro en el momento del load.
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
José Murugosa
FWH + Harbour + Bcc7. Una seda!
José,
Como tengo todo actualmente, edito el contenido de cada campo copiandolo previamente en una variable que es editada con un get, al salir del get, previo rlock(), grabo solo ese campo, o sea que si en otra pc editan otro/s campos, no influye. Esto está casi perfecto para lo que quiero (siempre hay un casi...).
La cuestión es que si en la otra pc actualizaron por ej. el campo NOMBRE mientras estoy editando el campo DOMICILIO, en mi pc no veo el cambio porque cuando accedí al registro copié _ en variables.
Lo que me interesa es una forma de actualizar las variables con los contenidos de _.
Por lo que explica Ricardo, usando TDATABASE, los objetos se actualizan solos, por lo que entendí, pudiera ser lo que necesito. Si edito el campo DOMICILIO y mientras en otra pc editan el campo NOMBRE y lo graban, el campo oDatabase:NOMBRE en mi pc, ¿Se actualiza solo?.
Gracias. Rolando
Como tengo todo actualmente, edito el contenido de cada campo copiandolo previamente en una variable que es editada con un get, al salir del get, previo rlock(), grabo solo ese campo, o sea que si en otra pc editan otro/s campos, no influye. Esto está casi perfecto para lo que quiero (siempre hay un casi...).
La cuestión es que si en la otra pc actualizaron por ej. el campo NOMBRE mientras estoy editando el campo DOMICILIO, en mi pc no veo el cambio porque cuando accedí al registro copié _ en variables.
Lo que me interesa es una forma de actualizar las variables con los contenidos de _.
Por lo que explica Ricardo, usando TDATABASE, los objetos se actualizan solos, por lo que entendí, pudiera ser lo que necesito. Si edito el campo DOMICILIO y mientras en otra pc editan el campo NOMBRE y lo graban, el campo oDatabase:NOMBRE en mi pc, ¿Se actualiza solo?.
Gracias. Rolando
- jose_murugosa
- Posts: 943
- Joined: Mon Feb 06, 2006 4:28 pm
- Location: Uruguay
- Contact:
La Tdatabase no actualiza "sola" sino que tiene un método Load para recargar el registro.rolando wrote:José,
Como tengo todo actualmente, edito el contenido de cada campo copiandolo previamente en una variable que es editada con un get, al salir del get, previo rlock(), grabo solo ese campo, o sea que si en otra pc editan otro/s campos, no influye. Esto está casi perfecto para lo que quiero (siempre hay un casi...).
La cuestión es que si en la otra pc actualizaron por ej. el campo NOMBRE mientras estoy editando el campo DOMICILIO, en mi pc no veo el cambio porque cuando accedí al registro copié _ en variables.
Lo que me interesa es una forma de actualizar las variables con los contenidos de _.
Por lo que explica Ricardo, usando TDATABASE, los objetos se actualizan solos, por lo que entendí, pudiera ser lo que necesito. Si edito el campo DOMICILIO y mientras en otra pc editan el campo NOMBRE y lo graban, el campo oDatabase:NOMBRE en mi pc, ¿Se actualiza solo?.
Gracias. Rolando
El método load recargará todos _ del registro y no solamente los modificados por la otra terminal, con lo cual reemplazará lo que ingresaste en el campo que modificas tú con lo que había en la base de datos al instante del load()
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
José Murugosa
FWH + Harbour + Bcc7. Una seda!
- Ricardo Ramirez E.
- Posts: 161
- Joined: Wed Jan 25, 2006 10:45 am
- Location: Praia - Cape Verde
- Contact:
Rolando :
Para un tratamiendo "normal" .. digo asi, pq no es comun editar un registro al mismo tiempo (considera los bloqueos son a nivel de registro)
sigo pensando que la TDATABASE sirve
Dadas las cosideraciones y cuidados a tomar dichas por Jose
Puedes clonar un objeto TDATABASE con :
con el fin de que a la hora de grabar... puedas cargar los valores en la la oDbf clon y asi.. poder comparar com las datas de la oDbf padre..
osea que en oDbf:aBuffers[] tendrias tus cambios... y en oDbfClon:aBuffers[] _ de las posibles estaciones-- previo ::Load() manual
El metodo ::Load() es llamado x la propia clase.. osea es automático...
cuando creas el objeto el mismo es invocado
MAs en tu caso.. antes de grabar tendrias que llamarlo nuevamente a fin de actulizarlo
Para un tratamiendo "normal" .. digo asi, pq no es comun editar un registro al mismo tiempo (considera los bloqueos son a nivel de registro)
sigo pensando que la TDATABASE sirve
Dadas las cosideraciones y cuidados a tomar dichas por Jose
Puedes clonar un objeto TDATABASE con :
Code: Select all
oDbfClon := oClone (oDbf)
osea que en oDbf:aBuffers[] tendrias tus cambios... y en oDbfClon:aBuffers[] _ de las posibles estaciones-- previo ::Load() manual
El metodo ::Load() es llamado x la propia clase.. osea es automático...
cuando creas el objeto el mismo es invocado
MAs en tu caso.. antes de grabar tendrias que llamarlo nuevamente a fin de actulizarlo
Saludos
Ricardo R.
xHarbour 1.1.0 Simplex , Microsoft Visual Studio 2008, Bcc55, Fwh Build. 9.01
Ricardo R.
xHarbour 1.1.0 Simplex , Microsoft Visual Studio 2008, Bcc55, Fwh Build. 9.01