Autor | Thema: Index, Index, Index | | Datum:25.07.01 22:32 
(GTelzerow@T-Online.de) | |
Hallo Profaner,
ich habe immer noch ein Problem mit dem Index.
Profan 7.0e, Win 2000
IfNot@Equ$(@FindFirst$("TESTXXL.DBF"),"TestXXL.dbf")
Assign #2,"TestXXL.str"
Rewrite #2
Print #2,"NAME;C;10;0"
Print #2,"VORNAME;C;10;0"
Print #2,"TEST;C;58;0"
Close #2
dbCreate "TestXXL.str" > "TestXXL.dbf"
Endif
Declare DBZeile%,SText1$,SText2$
@DBOpen(#1,"TestXXL.dbf")
@dbUse(#1)
@dbAppendBlank()
@dbPut("NAME","Schulz")
@dbPut("VORNAME","Werner")
@dbPutRec(0)
dbCreateIndex "NAME+VORNAME" > "SUCHE"
@DBIndex("SUCHE")
Let SText1$="Schulz"
Let SText2$="Werner"
Let DBZeile%=@dbFind(SText1$,SText2$,1)
Print DBZeile%
@dbClose(#1)
Waitinput
Im Interpreter wir der Datensatz gefunden, aber in der *.exe Datei nicht.
Wo ist der Fehler zu suchen?
G. Telzerow
|
| | Datum:26.07.01 01:08 
(rgh-soft@t-online.de) | |
Hallo,
dein Programm enthält zwei kleine Fehler. wenn man die beseitigt funktioniert es in Interpreter und als EXE gleichermaßen!
1. Name und Vorname sind je 10 Zeichen lang. Der zusammengesetzte Schlüssel besteht aus Name und Vorname. Damit die Suche funktioniert, müssen beide auch 10 Zeichen lang sein:
Let SText1$="Schulz "
Let SText2$="Werner "
2. @dbFind erwartet nur EINEN Stringparameter. Da hier ein zusammengesetzter Schlüssel verwandt wird, müssen die beiden teile als EIN String übergeben werden. Das erreichen wir mit dem "+":
Let DBZeile%=@dbFind(SText1$+SText2$,1)
Hinweis:
Um sich die Sache mit den Leerzeichen zu vereinfachen, kann man sich auch eine RPad-Funktion definieren, die einen String auf eine definierte Länge rechts mit Leerzeichen erweitert:
DEF @RPad$(2) @Left$(@$(1)+@Space$(@%(2)),@%(2))
Dann würde weiter unten stehen:
Let SText1$=@RPad$("Schulz",10)
Let SText2$=@RPad$("Werner",10)
|
| | Datum: 27.07.01 05:09 
(GTelzerow@T-Online.de) | |
Hallo Roland,
danke für diese Tips, manchmal sieht man den Wald vor Bäumen nicht.
THX
Gerd Telzerow
|
|
|