Page 1 of 1

Antonio please! problemas de bloqueo

Posted: Tue Jun 26, 2007 6:10 pm
by TecniSoftware
Antonio es urgentisimo que solucione este tema, se te ocurre que podrá ser????

Estoy usando xHarbour build 0.99.71 el que descargo habitualmente desde el cvs.

Estoy experimentando problemas de bloqueo en una red con XP SP2, lo extraño es que con esta función debería funcionar ok, devuelve .T. como que el registro fué bloqueado pero depues termina dando error dbfcdx/1022 "SE REQUIERE BLOQUEO", a alguien le ocurrió esto? revisé el foro pero no encontré información relevante acerca de este problema.

Antes que me preguntes, el problema ocurre en dos redes distintas con el mismo error asi que descarto problemas de placas, cables, etc. y obviamente cuando hago el REPLACE, viene un COMMIT - DBUNLOCK


La funcion de bloqueo es:

///////////////////////////////////////////////////////////////////////////////////

#Define MODE_FILE 1
#Define MODE_RECORD 2
#Define MODE_APPEND 3

Function Bloquea( cAlias, lAppend )
Local nMode
Local nCnt := 0

DEFAULT lAppend := .F.

DbSelectArea( cAlias )

If lAppend
nMode := MODE_APPEND
Else
nMode := MODE_RECORD
EndIf

Do While .T.

Do Case

Case nMode == MODE_APPEND
DbAppend()
If !NetErr()
Return .T.
Endif

Case nMode == MODE_RECORD
If RLock()
Return .T.
EndIf

EndCase

nCnt := nCnt + 1
SysWait(1)

If nCnt > 5
If !MsgYesNo( "No fué posible bloquear el registro " + StrZero( RecNo(), 8 ) + " del archivo " + cAlias + CRLF +;
"Reintenta?", "Atención!" )
Exit
Endif
Endif

EndDo

Return .F.

///////////////////////////////////////////////////////////////////////////////////


Necesito alguna ayudita urgente !!!!!!!!!!!!


Muchos saludos
Alejandro Cebolido, Buenos Aires, Argentina.

Posted: Tue Jun 26, 2007 6:30 pm
by jacgsoft
Este problema te pasa cuando quieres modificar un registro o cuando quieres adicionar? pareciera que esto pasa cuando quieres adicionar

Att.


Jaime

!!!!!!

Posted: Tue Jun 26, 2007 6:36 pm
by TecniSoftware
Me ocurre al querer modificar, inclusive usando la clase TDBF, me dice que el registro nnn está bloqueado cuando se perfectamente que nadie lo ha bloqueado por que tengo las dos pc una al lado de la otra....

Cada vez entiendo menos... Help!!!!

Saludos!

Posted: Tue Jun 26, 2007 7:54 pm
by Patricio Avalos Aguirre
Hola tecnisoftware

a mi me esta pasando lo mismo, pero al parecer es la funcion
neterr()

http://fivetechsoft.com/forums/viewtopic.php?t=7316

no es el caso...

Posted: Tue Jun 26, 2007 8:01 pm
by TecniSoftware
A NetErr la llama para el caso de Append() y el problema lo tengo cuando quiero modificar.

Saludos!

Posted: Tue Jun 26, 2007 9:37 pm
by jacgsoft
porque no haces algo simple en vez de llamar a la funcion BLOQUEA

usa de frente RLOCK()

RLOCK()
Replace campo with dato etc, etc, etc

UNLOCK

Posted: Tue Jun 26, 2007 11:14 pm
by Antonio Linares
Te sugiero dos ideas:

Descarga el build de xHarbour desde www.fivetechsoft.com/files/xharbour.exe y prueba con él

De continuar el error, construye un ejemplo en modo consola, sin FWH, y repórtalo en comp.lang.xharbour accesible desde google grupos

Gracias Antonio

Posted: Wed Jun 27, 2007 12:41 pm
by TecniSoftware
Gracias Antonio, ya descargué ese xHarbour, recompilo todo y me pongo a probar.

Con respecto a esto:
jacgsoft wrote:porque no haces algo simple en vez de llamar a la funcion BLOQUEA

usa de frente RLOCK()

RLOCK()
Replace campo with dato etc, etc, etc

UNLOCK
No es correcto ya que si RLock() devuelve .F. la actualización no se realiza.

Gracias de todos modos.

Saludos!
Alejandro Cebolido.

Posted: Wed Jun 27, 2007 1:21 pm
by Patricio Avalos Aguirre
para bloquear registro yo utilizo

Code: Select all

	if dbRLock( )
		lRet := .T.
	 	exit
	endif
  • DBRLOCK()
    Bloquea el registro que coincide con la identidad especificada o con
    la actual

    Sintaxis

    DBRLOCK(<xIdentidad>) --> lExito

    Argumentos

    <xIdentidad> es un valor £nico en la estructura del fichero de
    datos que identifica de forma un¡voca a uno de sus elementos (de base
    de datos). En ficheros con estructura de datos .dbf, <xIdentidad> es
    el n£mero de registro. En otros formatos de datos, <xIdentidad> es el
    valor de la clave principal.

    Devuelve

    DBRLOCK() devuelve un valor l¢gico que es verdadero (.T.) si no hay
    error en el bloqueo y falso (.F.) en caso contrario.

?

Posted: Wed Jun 27, 2007 2:50 pm
by TecniSoftware
Que diferencia existe entre RLock() y DBRlock() y/o en el caso que funcionen distinto, cual es mas conveniente de usar ??

Muchos saludos!
Alejandro Cebolido
Buenos Aires, Argentina.