Compañeros,
Mi aplicativo, que utiliza indices CDX y trabaja en RED LOCAL, me genera aleatoriamente este error:
Error DBFCDX/1022
Lock required
Llamado desde GFACTURAS(355)
... y justo la linea donde falla es un APPEND BLANK tipo:
select 4 ; append blank
replace nrctes with ....
NO es necesario bloquear ningun registro cuando se trata de un append blank, así que ¿ Cómo es posible ?
Mil gracias
Un saludo.
LORENZO.
Error DBFCDX/1022
Re: Error DBFCDX/1022
Seguramente tendrás que realizar el bloqueo del fichero, no del registro antes de realizar el Append
Code: Select all
if Flock()
endif
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- emmort2000
- Posts: 6
- Joined: Fri Nov 30, 2007 12:58 pm
Re: Error DBFCDX/1022
Hola, amigo te envio estas dos funciones a ver si te ayudan en algo:
*******************************************************************************
FUNCTION Add_Reg(cAlias,nSecs,lEspera)
*******************************************************************************
/*
Funcion: Add_reg()
Sintaxis: Add_reg( <cNomdbf>,[<nSecs>],[<lEspera>] )
Descripcion: Agrega un registro en blanco a la base de datos
Parametros:
<cNomdbf> Nombre de la base de datos a abrir
[<nSecs>] Segundos que tiene que esperar si no puede bloquear el registro
[<lEspera>] Solo saldra hasta poder agregar un el registro
Regresa: .t. si se pudo bloquear el registro
.f. no se logro el bloque o cancelacion de la operacion
*/
LOCAL lVret := .F.,;
lError := .T.,;
nTimer
DEFAULT nSecs := 5
DEFAULT lEspera := .T.
nTimer := SECONDS() + nSecs
DO WHILE lError
(cAlias)->(DBAPPEND())
lError := NETERR()
IF lError
IF SECONDS() >= nTimer
IF !lEspera
IF MsgRetryCancel("ARCHIVO NO DISPONIBLE: "+upper(cALIAS),"ATENCION.....")
nTimer := SECONDS() + nSecs // Se incrementan los segundos
ELSE
lError := .F.
ENDIF
ELSE
nTimer := SECONDS() + nSecs // Se incrementan los segundos
ENDIF
ENDIF
ELSE
IF Reg_Lock(cAlias,nSecs)
lVret := .T.
ENDIF
ENDIF
ENDDO
RETURN (lVret)
*******************************************************************************
FUNCTION Reg_Lock(cAlias,nSecs,lEspera)
*******************************************************************************
/*
Funcion: Reg_lock()
Sintaxis: Reg_lock( <cNomdbf>,[<nSecs>],[<lEspera>] )
Descripcion: Realiza el bloqueo de un registro
Parametros:
<cNomdbf> Nombre de la base de datos a abrir
[<nSecs>] Segundos que tiene que esperar si no puede bloquear el registro
[<lEspera>] Solo saldra hasta poder agregar un el registro
Regresa: .t. si se pudo bloquear el registro o
.f. en caso de que no se logro el bloque o cancelacion de la operacion
*/
LOCAL lVret := .F.
LOCAL lError := .F.
LOCAL nTimer , oSay ,oFont
DEFAULT nSecs := 5
DEFAULT lEspera := .T.
nTimer := SECONDS() + nSecs
DO WHILE !lError
lError := (cAlias)->(RLOCK(.t.))
IF lError
lVret := .T.
ELSE
IF !lEspera
IF SECONDS() >= nTimer
IF MsgRetryCancel("REGISTRO NO DISPONIBLE" ,"ATENCION.....")
nTimer := SECONDS() + nSecs
ELSE
lError := .T.
ENDIF
ENDIF
ELSE
MSGINFO("REGISTRO NO DISPONIBLE","ATENCION.....")
nTimer := SECONDS() + nSecs
ENDIF
ENDIF
ENDDO
RETURN (lVret)
*******************************************************************************
FUNCTION Add_Reg(cAlias,nSecs,lEspera)
*******************************************************************************
/*
Funcion: Add_reg()
Sintaxis: Add_reg( <cNomdbf>,[<nSecs>],[<lEspera>] )
Descripcion: Agrega un registro en blanco a la base de datos
Parametros:
<cNomdbf> Nombre de la base de datos a abrir
[<nSecs>] Segundos que tiene que esperar si no puede bloquear el registro
[<lEspera>] Solo saldra hasta poder agregar un el registro
Regresa: .t. si se pudo bloquear el registro
.f. no se logro el bloque o cancelacion de la operacion
*/
LOCAL lVret := .F.,;
lError := .T.,;
nTimer
DEFAULT nSecs := 5
DEFAULT lEspera := .T.
nTimer := SECONDS() + nSecs
DO WHILE lError
(cAlias)->(DBAPPEND())
lError := NETERR()
IF lError
IF SECONDS() >= nTimer
IF !lEspera
IF MsgRetryCancel("ARCHIVO NO DISPONIBLE: "+upper(cALIAS),"ATENCION.....")
nTimer := SECONDS() + nSecs // Se incrementan los segundos
ELSE
lError := .F.
ENDIF
ELSE
nTimer := SECONDS() + nSecs // Se incrementan los segundos
ENDIF
ENDIF
ELSE
IF Reg_Lock(cAlias,nSecs)
lVret := .T.
ENDIF
ENDIF
ENDDO
RETURN (lVret)
*******************************************************************************
FUNCTION Reg_Lock(cAlias,nSecs,lEspera)
*******************************************************************************
/*
Funcion: Reg_lock()
Sintaxis: Reg_lock( <cNomdbf>,[<nSecs>],[<lEspera>] )
Descripcion: Realiza el bloqueo de un registro
Parametros:
<cNomdbf> Nombre de la base de datos a abrir
[<nSecs>] Segundos que tiene que esperar si no puede bloquear el registro
[<lEspera>] Solo saldra hasta poder agregar un el registro
Regresa: .t. si se pudo bloquear el registro o
.f. en caso de que no se logro el bloque o cancelacion de la operacion
*/
LOCAL lVret := .F.
LOCAL lError := .F.
LOCAL nTimer , oSay ,oFont
DEFAULT nSecs := 5
DEFAULT lEspera := .T.
nTimer := SECONDS() + nSecs
DO WHILE !lError
lError := (cAlias)->(RLOCK(.t.))
IF lError
lVret := .T.
ELSE
IF !lEspera
IF SECONDS() >= nTimer
IF MsgRetryCancel("REGISTRO NO DISPONIBLE" ,"ATENCION.....")
nTimer := SECONDS() + nSecs
ELSE
lError := .T.
ENDIF
ENDIF
ELSE
MSGINFO("REGISTRO NO DISPONIBLE","ATENCION.....")
nTimer := SECONDS() + nSecs
ENDIF
ENDIF
ENDDO
RETURN (lVret)
Saludos, emmort2000
Valencia, Edo. Carabobo, Venezuela
xHarbour 0.99.71
FiveWin FWHx 7.05
Borland C++ 5.51
Eagle1
MySQL
Valencia, Edo. Carabobo, Venezuela
xHarbour 0.99.71
FiveWin FWHx 7.05
Borland C++ 5.51
Eagle1
MySQL