Indexlänge bei CDXDBE
Verfasst: So, 22. Okt 2023 19:51
Guten Abend,
vielleicht verstehe ich ja etwas falsch. Ich versuche, einen Index mit folgendem Ausdruck zu erstellen:
Dateiname ist ein Feld mit 80 Zeichen Länge, Verzeich hat 200 Zeichen Länge. Das Erstellen bringt diese Fehlermeldung:
Wer's nachstellen will, hier ist ein kleines Testprogramm:
Wo liegt mein Denkfehler?
vielleicht verstehe ich ja etwas falsch. Ich versuche, einen Index mit folgendem Ausdruck zu erstellen:
Code: Alles auswählen
dbCreateIndex("content.cdx", "Upper(Dateiname) + Upper(Verzeich)", , .F.)
Laut Dokumentation sollte es gehen:Xbase++ Version : Xbase++ (R) Version 2.00.1948
Betriebssystem : Windows 11 2009 Build 22621
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: content.cdx
-> VALTYPE: C VALUE: Upper(Dateiname) + Upper(Verzeich)
-> VALTYPE: U VALUE: NIL
-> VALTYPE: L VALUE: .F.
oError:canDefault : J
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : L„nge des Datenbankfeldes wurde berschritten
oError:filename :
oError:genCode : 63
oError:operation : DbCreateIndex
oError:osCode : 0
oError:severity : 2
oError:subCode : 8999
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
Ich komme aber "nur" auf 280 Zeichen, also etwas mehr als die Hälfe von 512.Max. length for both
- INDEX plus FOR expression 512 characters
Wer's nachstellen will, hier ist ein kleines Testprogramm:
Code: Alles auswählen
#INCLUDE "AppEvent.CH"
#INCLUDE "Xbp.CH"
FUNCTION Main()
Local aStru
IF fExists("content.dbf")
fErase("content.dbf")
ENDIF
IF fExists("content.cdx")
fErase("content.cdx")
ENDIF
aStru := {;
{"CONTENTID", "N", 10, 0},;
{"DATEINAME", "C", 80, 0},;
{"LAUFWERK", "C", 1, 0},;
{"VERZEICH", "C", 200, 0},;
{"TITEL", "C", 128, 0},;
{"UNTERTITEL", "C", 192, 0},;
{"QUELLE", "C", 128, 0},;
{"DATUM", "D", 10, 0},;
{"LIKES", "N", 7, 3},;
{"DISLIKES", "N", 7, 3};
}
dbCreate("content.dbf", aStru, "FOXCDX")
dbUseArea(.T., "FOXCDX", "content.dbf", "content", .T., .F.)
dbCreateIndex("content.cdx", "Upper(Dateiname) + Upper(Verzeich)", , .F.)
RETURN (.T.)
FUNCTION DBESys()
IF !DbeLoad("FOXDBE", .T.)
ConfirmBox()
ENDIF
IF !DbeLoad("CDXDBE", .T.)
ConfirmBox()
ENDIF
IF !DbeBuild("FOXCDX", "FOXDBE", "CDXDBE")
ConfirmBox()
ENDIF
RETURN (.T.)