Hola tengo un problema curioso con un indice, hay un rango de registros en torno a 140-160 en que al añadir el siguiente me da un error de harbour. En tiempo de ejecución me ha dado uno de los siguientes errores.
9021 - Wrong parent key
9021 - Index Corrupted
9021 - Free Space calculated wrong
Versión: xHarbour build 0.99.71
Compiler: Borland C++ 5.5.1
He probado con xHarbour 1.00 y se produce el error en el mismo punto.
He simplificado el código al maximo para mostrar un ejemplo del error
******************************************************
FUNCTION Main
Local cTemp := "MYFILE.DBF"
Local nI := 1
SET DATE TO FRENCH
SET EPOCH TO 1960
SET CENTURY ON
SET DELETED ON
REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )
REQUEST HB_LANG_ES
HB_LANGSELECT("ES")
IF FILE("MYFILE.CDX")
ERASE MYFILE.CDX
ENDIF
IF FILE("MYFILE.DBF")
ERASE MYFILE.DBF
ENDIF
DBCreate(cTemp,{ {"COD","C",10,0} , {"DES","C",240,0}} )
USE (cTemp) EXCLUSIVE NEW ALIAS TEMP
FOR nI = 1 TO 150 //137 TO 161
DBAppend()
NEXT
INDEX ON TEMP->COD TAG COD TO MYFILE
INDEX ON TEMP->DES TAG DES TO FILE
FOR nI = 1 TO 250
DBAppend()
NEXT
RETURN NIL
***************************************************
Da el siguiente error
Page = 0xa00, calc=-205, iFree=35, req=3, keys=151, keyLen=240
Error irrecuperable 9201: hb_cdxPageLeafEncode: FreeSpace calculated wrong!.
Called from DBAPPEND(0)
***************************************************
He estado buscando información sobre la longitud de las claves de indice
pero no he encontrado gran cosa al respecto y la verdad ando un poco
desorientado, con menos de 137 en el ejemplo funciona correctamente y con más de 161 también, se agradece cualquier información al respecto.