Page 1 of 1

Error Indice 9021

Posted: Thu Apr 10, 2008 1:15 pm
by AlbertoTorres
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.

Posted: Thu Apr 10, 2008 3:04 pm
by karinha
//-> Intente ahora... Fivewin, és fantastico!!!

Code: Select all

#include "FiveWin.ch"

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, DBFFPT
    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

    IF .NOT. FILE("MYFILE.DBF")

        MsgRun( "Creacion de Registros...",                              ;
                "Por Favor, Espera!"      ,                              ;
                { || DBCreate( cTemp, { { "COD", "C", 010, 000 },        ;
                                        { "DES", "C", 240, 000 } } ) } )

    ENDIF

    DbCloseAll()

    USE ( cTemp ) EXCLUSIVE NEW

    FOR nI = 1 TO 150 //137 TO 161

        DBAppend()

        REPLACE COD WITH STR(nI)
        REPLACE DES WITH [FIVEWIN THE BEST OF THE WORLD]

    NEXT

    //
    INDEX ON FIELD->COD TAG CODIGO TO MYFILE
    //
    INDEX ON FIELD->DES TAG DESCR  TO MYFILE

    //

    GO TOP

    BROWSE()

    FOR nI = 151 TO 450

        DBAppend()

        REPLACE COD WITH STR(nI)
        REPLACE DES WITH [FIVEWIN, EL MEJOR DEL MUNDO!! YES!]

    NEXT

    SET ORDER TO 1

    GO TOP

    BROWSE()

RETURN NIL