![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hallo zusammen, ich brauche ein wenig Hilfe von unseren DBaseIII-Spezialisten
habe eine .dbf mit 2 Feldern & ca. 20000 unsortierten Datensätzen auf das 2. Feld habe ich deshalb einen Index gelegt, um schneller suchen zu können. Von allen Datensätzen, die dem Suchkriterium im 2. Feld entsprechen, soll das 1. Feld ausgelesen & in eine Stringliste gespeichert werden. Was mich aber seit Stunden verrückt macht ist, daß der DatensatzZeiger in der Such-Schleife nach dem 1. Treffer nicht weiterrückt. Ich kann machen was ich will, sämtliche db("go",..)-Varianten habe ich geprobt - Nichts! Zur Kontrolle habe ich die momentane Trefferposition ausgeben lassen, daran sieht man deutlich, daß immer wieder die selbe Zeile gefunden wird. Aber warum? Der Code ist sofort laufähig, die Tabelle muß direkt im ProgVerz. stehen: 2 Felder, beide Text, 1x8 & 1x22 Zeichen - Ich würde sie auch bei Bedarf zum Testen zusenden Code:
' testprog zum suchen in einer indizierten dbaseIII
Proc tsuche
'sucht alle nummern aus test.dbf, die mit 02 beginnen schreibt diese nummern in die stringliste ml&
Declare tr%, ml&
ml& = @Create("list",0) 'stringliste für die aufnahme der gefundenen texte erstellen
@db("Open", #1,"test.dbf") ' test.dbf als #1 öffnen
@db("Use", #1) 'test.dbf aktivieren
@db("CreateIndex", "NUM", "testnum") 'indexdatei für feld 2 NUM(22stelliges Textfeld)
@Db("index", "testnum") 'indexdatei aktivieren
@db("Go", "*",1) 'zeiger auf 1. datensatz
tr% = 0 'position in tabelle bei treffer
tr% = @db("find","02",0) 'im NUM nach den ersten 2 zeichen suchen, die mit 02 beginnen
While tr% > 0 'löppt solange tr% nicht 0, also die 02 gefunden wird
AddString(ml&, @db("getfield",1)) ' feld 1 (text) auslesen) & der stringliste hinzufügen
locate 2,2 ' zur demonstration trefferpositionen anzeigen lassen
print tr%
@db("Go", "INDEX", tr% + 1) 'zeiger auf nächsten datensatz
tr% = @db("find","02",0) 'ab dieser pos. nach der nächsten nr. die mit 02 beginnt suchen
EndWhile
@dbclose(#1)
Print "Suche beendet"
tr% = @GetCount(ml&)
if tr% > 0 'wenn mindestens eine nr. gefunden wurde
Assign #1, "02.txt" 'zugriffsnummer für 02.txt
Rewrite #1 'datei zum schreiben öffnen
WhileLoop 0, tr% 'löppt die anzahl der gefundenen nummern durch
Print #1, @GetString$(ml&,&loop) 'aktuellen text in die textdatei schreiben
EndWhile
Close #1
EndProc
cls
tsuche
print
print " *** Zum Beenden beliebige Taste drücken *** "
waitkey
end
Jörg edit: Feld 1 heißt TXT & Feld 2 NUM |
|
|
|
|
|
|
#2 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Eine Gruppenwahl würde ich wie folgt vornehmen:
Code:
'....nach Feld "NUM" indiziert, NUM-Typ=C
If dbFind("02",0)>0
WhileLoop &dbRecCount ' mehr kann es nicht sein
If left$(trim$(@db("Get", "NUM")),2)="02"
'AddString(%,$) oder was auch immer
Else
BREAK ' da indiziert, kann keine weitere "02" kommen
EndIf
dbGo("NEXT")
case %dbEoF=1:BREAK
EndWhile
EndIf
|
|
|
|
|
|
#3 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Jo DankeThomas, deine Methode haut hin
Habe die Schleife noch ein wenig eingekürzt, löppt 'n Ticken schneller: Code:
'....nach Feld "NUM" indiziert, NUM-Typ=C
If db("Find","02",0) > 0
While left$(@db("Get", "NUM"),2)="02" 'ist jetzt Laufbedingung, spart die If-Abfrage
'AddString(%,$) oder was auch immer
db("Go", "NEXT") 'zeiger auf nächsten datensatz
EndWhile
EndIf
%dbEoF in diesem Fall deshalb nicht, weil ich genau weiß, daß in diesem Feld immer eine Nummer gibt die höher beginnt als mit 02, zB. 03, 05 usw Ist also gelöst - Danke! Dann habe ich die Funktion db("find"....) aber völlig mißverstanden und db("go",...) wohl auch Gruß Jörg Geändert von JörgG (15.07.2011 um 14:30 Uhr) |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| "HotFixInstallerUI.dll" und "eula.rtf" nach Update / Jetzt externe Festplatte defekt | Maliana | Viren-Forum | 3 | 01.12.2009 16:57 |
| Hab da ein Problem mit "JFritz" und "Filzip&q | Jupp | Software - Allgemein | 0 | 19.10.2006 21:55 |
| Problem nach Installation von "NetPumper"/"An | -Iron- | Windows XP | 0 | 26.08.2005 00:40 |
| "Hilfe"... "Senden an"Desktop"-Verl | Bluebear | Windows XP | 2 | 25.05.2005 02:22 |