Edición en Red

Post Reply
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Edición en Red

Post by rolando »

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 :D
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Edición en Red

Post by FranciscoA »

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 :D
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.
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Post by rolando »

Gracias por responder, pero no edito directamente el registro.

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

Rolando
User avatar
Ricardo Ramirez E.
Posts: 161
Joined: Wed Jan 25, 2006 10:45 am
Location: Praia - Cape Verde
Contact:

Post by Ricardo Ramirez E. »

Rolando...

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
para referirte a las campos

Code: Select all

oDbf:cCODIGO := "00001"
oDbf:cNOME     := "TU NOMBRES"
al referirte a _.. realmente estas interactuando con un array una data de la TDatabase

Code: Select all

::aBuffer[ 1 ]
::aBuffer[ 2 ]
.
::aBuffer[n]  //esto segun  _ que tengas
Para grabar

Code: Select all

::oDbf:Save()
Para un append

Code: Select all

::oDbf:Append()
Cuando navegas por la

Code: Select all

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
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Post by rolando »

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
User avatar
jose_murugosa
Posts: 943
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Post by jose_murugosa »

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 :D
Cuidado!!

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!
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Post by rolando »

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 :roll:
User avatar
jose_murugosa
Posts: 943
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Post by jose_murugosa »

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 :roll:
La Tdatabase no actualiza "sola" sino que tiene un método Load para recargar el registro.
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!
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Post by rolando »

José,

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

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

Rolando :(
User avatar
Ricardo Ramirez E.
Posts: 161
Joined: Wed Jan 25, 2006 10:45 am
Location: Praia - Cape Verde
Contact:

Post by Ricardo Ramirez E. »

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 :

Code: Select all

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[] _ 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 :lol:
Saludos
Ricardo R.
xHarbour 1.1.0 Simplex , Microsoft Visual Studio 2008, Bcc55, Fwh Build. 9.01
Post Reply