In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Problemas con bloquedo de registros en RED

Foro de Xailer profesional en español
Responder
Marco Scolamieri
Mensajes: 30
Registrado: Vie Mar 26, 2010 10:07 pm

Problemas con bloquedo de registros en RED

Mensaje por Marco Scolamieri »

Hola como estan, estoy tratando de evitar el cartel de error cuando un
registro esta bloqueado por otra terminal y quiero bloquearlo. Probe con
IsRecordLocked()
de esta manera.
IF !::oDbfDataSetClientes:IsRecordLocked()
IF ::oDbfDataSetClientes:RecLock(,0.01)
MSGINFO("bloqueado")
ELSE
MSGINFO("no se puede bloquear")
ENDIF
ELSE
msginfo("esta bloqueado")
ENDIF
y solo me funcional cuando el registro esta bloqueado por la misma terminal,
no por otra terminal, desde ya muchas gracias
Marco
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Problemas con bloquedo de registros en RED

Mensaje por ignacio »

Marco,
El método IsRecordLocked() se apoya en la función DbRLockList() de xHarbour
que retorna los registros bloqueados por la propia aplicación. No obstante,
la mejor forma para saber si un registro está bloqueado es simplemente
tratar de bloquearlo.
Hemos modificado la documentación de Xailer para indicar claramente que sólo
funciona con registros bloqueados por la propia aplicación.
Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
http://www.xailer.com/forum
http://www.xailer.com/dokuwiki
"Marco Scolamieri" escribió en el mensaje de
noticias:[email=4d2217d7@svctag-j7w3v3j....]4d2217d7@svctag-j7w3v3j....[/email]
Hola como estan, estoy tratando de evitar el cartel de error cuando un
registro esta bloqueado por otra terminal y quiero bloquearlo. Probe con
IsRecordLocked()
de esta manera.
IF !::oDbfDataSetClientes:IsRecordLocked()
IF ::oDbfDataSetClientes:RecLock(,0.01)
MSGINFO("bloqueado")
ELSE
MSGINFO("no se puede bloquear")
ENDIF
ELSE
msginfo("esta bloqueado")
ENDIF
y solo me funcional cuando el registro esta bloqueado por la misma terminal,
no por otra terminal, desde ya muchas gracias
Marco
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Marco Scolamieri
Mensajes: 30
Registrado: Vie Mar 26, 2010 10:07 pm

Problemas con bloquedo de registros en RED

Mensaje por Marco Scolamieri »

Gracias Ignacio por responder, ahora la pregunta sería como hago para que no
me salga el carte propio de xailer.
desde ya muchas gracias.
Marco
"Ignacio Ortiz de Zúñiga" <NoNameToAvoidSpam@xailer.com> escribió en el
mensaje news:4d221f06$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Marco,
>
> El método IsRecordLocked() se apoya en la función DbRLockList() de
> xHarbour que retorna los registros bloqueados por la propia aplicación. No
> obstante, la mejor forma para saber si un registro está bloqueado es
> simplemente tratar de bloquearlo.
>
> Hemos modificado la documentación de Xailer para indicar claramente que
> sólo funciona con registros bloqueados por la propia aplicación.
>
> Un saludo
>
>
> Ignacio Ortiz de Zúñiga
> [Equipo de Xailer / Xailer team]
> http://www.xailer.com
> http://www.xailer.info
> http://www.xailer.com/forum
> http://www.xailer.com/dokuwiki
> "Marco Scolamieri" escribió en el mensaje de
> noticias:[email=4d2217d7@svctag-j7w3v3j....]4d2217d7@svctag-j7w3v3j....[/email]
>
> Hola como estan, estoy tratando de evitar el cartel de error cuando un
> registro esta bloqueado por otra terminal y quiero bloquearlo. Probe con
> IsRecordLocked()
> de esta manera.
>
> IF !::oDbfDataSetClientes:IsRecordLocked()
>
> IF ::oDbfDataSetClientes:RecLock(,0.01)
> MSGINFO("bloqueado")
> ELSE
> MSGINFO("no se puede bloquear")
> ENDIF
> ELSE
> msginfo("esta bloqueado")
> ENDIF
>
> y solo me funcional cuando el registro esta bloqueado por la misma
> terminal,
> no por otra terminal, desde ya muchas gracias
> Marco
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Problemas con bloquedo de registros en RED

Mensaje por ignacio »

Marco,
Tiene usted toda la razón. Le recomiendo que de momento lo haga así­ (no
probado):
FUNCTION IsRecordLocked( oDbf )
LOCAL lUnLocked
WITH OBJECT oDbf
lUnLocked := ( :cAlias )->( DbRlock( :Recno() ) )
IF lUnLocked
( :cAlias )->( DbRUnlock( :Recno() ) )
ENDIF
END WITH
RETURN ! lUnLocked
Modificaremos el método IsRecordLocked() para que funcione con registros
bloqueados por otros usuarios.
Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
http://www.xailer.com/forum
http://www.xailer.com/dokuwiki
"Marco Scolamieri" escribió en el mensaje de
noticias:[email=4d2220da@svctag-j7w3v3j....]4d2220da@svctag-j7w3v3j....[/email]
Gracias Ignacio por responder, ahora la pregunta serí­a como hago para que no
me salga el carte propio de xailer.
desde ya muchas gracias.
Marco
"Ignacio Ortiz de Zúñiga" <NoNameToAvoidSpam@xailer.com> escribió en el
mensaje news:4d221f06$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Marco,
>
> El método IsRecordLocked() se apoya en la función DbRLockList() de
> xHarbour que retorna los registros bloqueados por la propia aplicación. No
> obstante, la mejor forma para saber si un registro está bloqueado es
> simplemente tratar de bloquearlo.
>
> Hemos modificado la documentación de Xailer para indicar claramente que
> sólo funciona con registros bloqueados por la propia aplicación.
>
> Un saludo
>
>
> Ignacio Ortiz de Zúñiga
> [Equipo de Xailer / Xailer team]
> http://www.xailer.com
> http://www.xailer.info
> http://www.xailer.com/forum
> http://www.xailer.com/dokuwiki
> "Marco Scolamieri" escribió en el mensaje de
> noticias:[email=4d2217d7@svctag-j7w3v3j....]4d2217d7@svctag-j7w3v3j....[/email]
>
> Hola como estan, estoy tratando de evitar el cartel de error cuando un
> registro esta bloqueado por otra terminal y quiero bloquearlo. Probe con
> IsRecordLocked()
> de esta manera.
>
> IF !::oDbfDataSetClientes:IsRecordLocked()
>
> IF ::oDbfDataSetClientes:RecLock(,0.01)
> MSGINFO("bloqueado")
> ELSE
> MSGINFO("no se puede bloquear")
> ENDIF
> ELSE
> msginfo("esta bloqueado")
> ENDIF
>
> y solo me funcional cuando el registro esta bloqueado por la misma
> terminal,
> no por otra terminal, desde ya muchas gracias
> Marco
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Marco Scolamieri
Mensajes: 30
Registrado: Vie Mar 26, 2010 10:07 pm

Problemas con bloquedo de registros en RED

Mensaje por Marco Scolamieri »

Muchas gracias por su pronta repuesta, esperare dicha modificación, no
obstante queria comentarte que la funcion DBRLock() en red funciona bien
pero localmente
vuelve a bloquear un registro que ya tengo bloqueado sin avisarme o dar
error, saludos
Marco
"Ignacio Ortiz de Zúñiga" <NoNameToAvoidSpam@xailer.com> escribió en el
mensaje news:4d2225fe$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Marco,
>
> Tiene usted toda la razón. Le recomiendo que de momento lo haga así (no
> probado):
>
> FUNCTION IsRecordLocked( oDbf )
>
> LOCAL lUnLocked
>
> WITH OBJECT oDbf
> lUnLocked := ( :cAlias )->( DbRlock( :Recno() ) )
> IF lUnLocked
> ( :cAlias )->( DbRUnlock( :Recno() ) )
> ENDIF
> END WITH
>
> RETURN ! lUnLocked
>
> Modificaremos el método IsRecordLocked() para que funcione con registros
> bloqueados por otros usuarios.
>
> Un saludo
>
> Ignacio Ortiz de Zúñiga
> [Equipo de Xailer / Xailer team]
> http://www.xailer.com
> http://www.xailer.info
> http://www.xailer.com/forum
> http://www.xailer.com/dokuwiki
> "Marco Scolamieri" escribió en el mensaje de
> noticias:[email=4d2220da@svctag-j7w3v3j....]4d2220da@svctag-j7w3v3j....[/email]
>
> Gracias Ignacio por responder, ahora la pregunta sería como hago para que
> no
> me salga el carte propio de xailer.
> desde ya muchas gracias.
> Marco
>
>
>
>
> "Ignacio Ortiz de Zúñiga" <NoNameToAvoidSpam@xailer.com> escribió en el
> mensaje news:4d221f06$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>> Marco,
>>
>> El método IsRecordLocked() se apoya en la función DbRLockList() de
>> xHarbour que retorna los registros bloqueados por la propia aplicación.
>> No obstante, la mejor forma para saber si un registro está bloqueado es
>> simplemente tratar de bloquearlo.
>>
>> Hemos modificado la documentación de Xailer para indicar claramente que
>> sólo funciona con registros bloqueados por la propia aplicación.
>>
>> Un saludo
>>
>>
>> Ignacio Ortiz de Zúñiga
>> [Equipo de Xailer / Xailer team]
>> http://www.xailer.com
>> http://www.xailer.info
>> http://www.xailer.com/forum
>> http://www.xailer.com/dokuwiki
>> "Marco Scolamieri" escribió en el mensaje de
>> noticias:[email=4d2217d7@svctag-j7w3v3j....]4d2217d7@svctag-j7w3v3j....[/email]
>>
>> Hola como estan, estoy tratando de evitar el cartel de error cuando un
>> registro esta bloqueado por otra terminal y quiero bloquearlo. Probe con
>> IsRecordLocked()
>> de esta manera.
>>
>> IF !::oDbfDataSetClientes:IsRecordLocked()
>>
>> IF ::oDbfDataSetClientes:RecLock(,0.01)
>> MSGINFO("bloqueado")
>> ELSE
>> MSGINFO("no se puede bloquear")
>> ENDIF
>> ELSE
>> msginfo("esta bloqueado")
>> ENDIF
>>
>> y solo me funcional cuando el registro esta bloqueado por la misma
>> terminal,
>> no por otra terminal, desde ya muchas gracias
>> Marco
>>
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Problemas con bloquedo de registros en RED

Mensaje por ignacio »

Marco,
Esa función es de xHarbour no de Xailer, y en mi opinión el comportamiento
que describe es correcto. Si quiere saber si un registro ha sido bloqueado
POR USTED MISMO deberá utilizar la función DBRLockList() de xHarbour.
Un saludo,
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
http://www.xailer.com/forum
http://www.xailer.com/dokuwiki
"Marco Scolamieri" escribió en el mensaje de
noticias:4d222e30$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Muchas gracias por su pronta repuesta, esperare dicha modificación, no
obstante queria comentarte que la funcion DBRLock() en red funciona bien
pero localmente
vuelve a bloquear un registro que ya tengo bloqueado sin avisarme o dar
error, saludos
Marco
"Ignacio Ortiz de Zúñiga" <NoNameToAvoidSpam@xailer.com> escribió en el
mensaje news:4d2225fe$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Marco,
>
> Tiene usted toda la razón. Le recomiendo que de momento lo haga así­ (no
> probado):
>
> FUNCTION IsRecordLocked( oDbf )
>
> LOCAL lUnLocked
>
> WITH OBJECT oDbf
> lUnLocked := ( :cAlias )->( DbRlock( :Recno() ) )
> IF lUnLocked
> ( :cAlias )->( DbRUnlock( :Recno() ) )
> ENDIF
> END WITH
>
> RETURN ! lUnLocked
>
> Modificaremos el método IsRecordLocked() para que funcione con registros
> bloqueados por otros usuarios.
>
> Un saludo
>
> Ignacio Ortiz de Zúñiga
> [Equipo de Xailer / Xailer team]
> http://www.xailer.com
> http://www.xailer.info
> http://www.xailer.com/forum
> http://www.xailer.com/dokuwiki
> "Marco Scolamieri" escribió en el mensaje de
> noticias:[email=4d2220da@svctag-j7w3v3j....]4d2220da@svctag-j7w3v3j....[/email]
>
> Gracias Ignacio por responder, ahora la pregunta serí­a como hago para que
> no
> me salga el carte propio de xailer.
> desde ya muchas gracias.
> Marco
>
>
>
>
> "Ignacio Ortiz de Zúñiga" <NoNameToAvoidSpam@xailer.com> escribió en el
> mensaje news:4d221f06$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>> Marco,
>>
>> El método IsRecordLocked() se apoya en la función DbRLockList() de
>> xHarbour que retorna los registros bloqueados por la propia aplicación.
>> No obstante, la mejor forma para saber si un registro está bloqueado es
>> simplemente tratar de bloquearlo.
>>
>> Hemos modificado la documentación de Xailer para indicar claramente que
>> sólo funciona con registros bloqueados por la propia aplicación.
>>
>> Un saludo
>>
>>
>> Ignacio Ortiz de Zúñiga
>> [Equipo de Xailer / Xailer team]
>> http://www.xailer.com
>> http://www.xailer.info
>> http://www.xailer.com/forum
>> http://www.xailer.com/dokuwiki
>> "Marco Scolamieri" escribió en el mensaje de
>> noticias:[email=4d2217d7@svctag-j7w3v3j....]4d2217d7@svctag-j7w3v3j....[/email]
>>
>> Hola como estan, estoy tratando de evitar el cartel de error cuando un
>> registro esta bloqueado por otra terminal y quiero bloquearlo. Probe con
>> IsRecordLocked()
>> de esta manera.
>>
>> IF !::oDbfDataSetClientes:IsRecordLocked()
>>
>> IF ::oDbfDataSetClientes:RecLock(,0.01)
>> MSGINFO("bloqueado")
>> ELSE
>> MSGINFO("no se puede bloquear")
>> ENDIF
>> ELSE
>> msginfo("esta bloqueado")
>> ENDIF
>>
>> y solo me funcional cuando el registro esta bloqueado por la misma
>> terminal,
>> no por otra terminal, desde ya muchas gracias
>> Marco
>>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
emeasoft
Mensajes: 1094
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Problemas con bloquedo de registros en RED

Mensaje por emeasoft »

Marco:
Echa un vistazo a el siguiente ejemplo.
Yo uso en red con éxito.
IF !Rlock .OR. NetErr()
MsInfo("Error")
ELSE
.....
DBUnlock() <- libera el registro.
ENDIF
NetErr()
Determines if a database command has failed in network operation.
Syntax
NetErr( [<lNewStatus>] ) --> lIsNetworkError
Arguments
<lNewStatus>
An optional logical value that sets the global status for errors which may occur with database operations in a network. Return
The function returns .T. (true) if a database could not be opened or a new record could not be created during concurrent access in a network. Otherwise, the return value is .F. (false).
Description
NetErr() is a function used to detect database errors that may occur with the commands USE, USE...EXCLUSIVE or APPEND BLANK when a database is concurrently accessed by
Responder