FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Edición en Red
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Edición en Red

Posted: Thu Oct 30, 2008 11:57 PM

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 los cambios 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 :D

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM

Re: Edición en Red

Posted: Fri Oct 31, 2008 12:05 AM
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 los cambios 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 :-)


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.

Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Edición en Red

Posted: Fri Oct 31, 2008 01:02 AM

Gracias por responder, pero no edito directamente el registro.

Edito un conjunto de variables que inicialmente toman los valores de los campos y, con un botón guardo los cambios y, en ese momento grabo las variables en el registro correspondiente.

Rolando

Posts: 161
Joined: Wed Jan 25, 2006 10:45 AM

Edición en Red

Posted: Fri Oct 31, 2008 08:07 AM
Rolando...

Puedes usar la Clase TDatabase.. ella te crea "gratis" un array con los valores de los campos :

Use Test SHARED
DATABASE oDbf  // aqui creas el objeto TDATABASE

para referirte a las campos
oDbf:cCODIGO := "00001"
oDbf:cNOME     := "TU NOMBRES"

al referirte a los campos.. realmente estas interactuando con un array una data de la TDatabase
::aBuffer[ 1 ]
::aBuffer[ 2 ]
.
::aBuffer[n]  //esto segun  los campos que tengas

Para grabar
::oDbf:Save()

Para un append
::oDbf:Append()

Cuando navegas por la
oDbf ::oDbf:Skip(), oDbf:Gotop(), oDbf:GoBottom()


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 :-)
Saludos

Ricardo R.

xHarbour 1.1.0 Simplex , Microsoft Visual Studio 2008, Bcc55, Fwh Build. 9.01
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Edición en Red

Posted: Fri Oct 31, 2008 10:43 AM

Ricardo,

Ya tengo todo armado usando Alias pero voy a estudiar lo que me indicas y trataré de ver como funciona.

Muchas gracias.

Rolando :D

Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM

Edición en Red

Posted: Fri Oct 31, 2008 11:58 AM
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 :-)


Cuidado!!

Si en tu terminal estás haciendo cambios en "ciertos campos de un registro" y en otra hacen cambios en otros campos del mismo registro y los guardan, al efectuar el Load() con la tdatabase cargas los datos grabados en la otra terminal, pero pierdes los cambios que tu realizaste, ya que se carga a las variables intermedias TODOS LOS CAMPOS 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

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Edición en Red

Posted: Fri Oct 31, 2008 12:13 PM

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é los campos en variables.

Lo que me interesa es una forma de actualizar las variables con los contenidos de los campos.

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 :roll:

Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM

Edición en Red

Posted: Fri Oct 31, 2008 12:20 PM
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é los campos en variables.

Lo que me interesa es una forma de actualizar las variables con los contenidos de los campos.

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 :-)


La Tdatabase no actualiza "sola" sino que tiene un método Load para recargar el registro.
El método load recargará todos los campos 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

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 593
Joined: Sat May 12, 2007 11:47 AM

Edición en Red

Posted: Fri Oct 31, 2008 12:32 PM

José,

O sea que estoy en lo mismo. No me sirve tampoco la TDATABASE.

Y Bue, seguíré intentando solucionarlo. Gracias.

Rolando :(

Posts: 161
Joined: Wed Jan 25, 2006 10:45 AM

Edición en Red

Posted: Fri Oct 31, 2008 12:43 PM
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 :
oDbfClon := oClone (oDbf)


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[] los cambios 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

Continue the discussion