Error DBFCDX/1022

Post Reply
Loren
Posts: 458
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Error DBFCDX/1022

Post by Loren »

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.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Error DBFCDX/1022

Post by cnavarro »

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.
User avatar
emmort2000
Posts: 6
Joined: Fri Nov 30, 2007 12:58 pm

Re: Error DBFCDX/1022

Post by emmort2000 »

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)
Saludos, emmort2000
Valencia, Edo. Carabobo, Venezuela

xHarbour 0.99.71
FiveWin FWHx 7.05
Borland C++ 5.51
Eagle1
MySQL
Post Reply