Seite 1 von 1
In Datenbank nach Wert suchen
Verfasst: Mi, 06. Dez 2017 15:48
von vorti
Hallo,
kann mir jemand erklären wo bzw. warum das Array nicht gefüllt wird.
Code: Alles auswählen
select 4
if nRechnungsnr1#0
do while nRechnungsnr1 < nRechnungsnr2
locate for field -> rnr = nRechnungsnr1
do while .not. Found()
AAdd( aFehlendeRechung, str(nRechnungsnr1) )
end do
nRechnungsnr1++
end do
endif
if Len( aFehlendeRechung ) = 0
Ffehler()
else
FlisteRechnungen( aFehlendeRechung )
endif
endif
Re: In Datenbank nach Wert suchen
Verfasst: Mi, 06. Dez 2017 16:08
von brandelh
nRechnungsnr2 wird hier nirgends gesetzt, der Wert wird aber gleich beim ersten Do While benötigt.
Re: In Datenbank nach Wert suchen
Verfasst: Mi, 06. Dez 2017 16:17
von vorti
nRechnungsnr1 und 2 werden davor belegt, steht hier nur nicht dabei.
Re: In Datenbank nach Wert suchen
Verfasst: Mi, 06. Dez 2017 18:38
von ramses
Dein Code einen Fehler.
Die Schlaufe nach locate wird nur durchlaufen wenn locate nichts findet und läuft dann unendlich (hängt) da sich die Bedingung .not. found() in der Schlaufe nicht ändert.
Was iat das Ziel deines Codes?
Gruss Carlo
Re: In Datenbank nach Wert suchen
Verfasst: Mi, 06. Dez 2017 19:01
von vorti
Die soll auch nur laufen wenn locate nichts findet.
Ziel ist folgendes. Ich habe ein Feld mit Nummern, z.B. durchgehend von 1-10 (außer die 7, die fehlt)
Und genau diese 7 will ich in diesem fall haben, also die Nr. die fehlt.
Re: In Datenbank nach Wert suchen
Verfasst: Mi, 06. Dez 2017 20:20
von ramses
Du hast einen Fehler in deinem Code.
Code: Alles auswählen
do while .not. Found()
AAdd( aFehlendeRechung, str(nRechnungsnr1) )
end do
angenommen deine 2 Parameter sind korrekt initialisiert also nRechnungsnr1 ist KLEINER nRechnungsnr2 und dir fehlt eine Nummer in diesem Bereich bleibt dein Code in der Schleife hängen bist der Speicher voll ist weil found() immer .f. bleibt. Ich vermute aber dass deine Parameter nicht korrekt sind und du deshalb schon nicht in die Schleife kommst.
Versuch doch mal das Programm im Debugger im Einzelschritt abzuarbeiten da kannst du deine Parameter prüfen.
Gruss Carlo
Re: In Datenbank nach Wert suchen
Verfasst: Mi, 06. Dez 2017 20:27
von AUGE_OHR
vorti hat geschrieben: ↑Mi, 06. Dez 2017 19:01
Die soll auch nur laufen wenn locate nichts findet.
dann überprüfe doch mal auf EOF() ...
Re: In Datenbank nach Wert suchen
Verfasst: Do, 07. Dez 2017 6:37
von brandelh
ramses hat geschrieben: ↑Mi, 06. Dez 2017 20:20
Du hast einen Fehler in deinem Code.
Code: Alles auswählen
do while .not. Found()
AAdd( aFehlendeRechung, str(nRechnungsnr1) )
end do
angenommen deine 2 Parameter sind korrekt initialisiert also nRechnungsnr1 ist KLEINER nRechnungsnr2 und dir fehlt eine Nummer in diesem Bereich bleibt dein Code in der Schleife hängen bist der Speicher voll ist weil found() immer .f. bleibt.
Gruss Carlo
da kann ich ramses nur zustimmen.
In dieser Situation wäre eine IF Abfrage richtig, da diese nur einmal durchlaufen wird und wieder zu locate zurück kommt.
Code: Alles auswählen
if .not. Found()
AAdd( aFehlendeRechung, str(nRechnungsnr1) )
endif
In dieser Schleife wird ja kein erneutes locate ausgeführt, also dürfte found() nie wahr werden !
Somit müsste dein Programm sich hier aufhängen ... kann es sein, dass der code Schnipsel nicht vollständig ist
Re: In Datenbank nach Wert suchen
Verfasst: Do, 07. Dez 2017 6:49
von brandelh
vorti hat geschrieben: ↑Mi, 06. Dez 2017 19:01
Die soll auch nur laufen wenn locate nichts findet.
Ziel ist folgendes. Ich habe ein Feld mit Nummern, z.B. durchgehend von 1-10 (außer die 7, die fehlt)
Und genau diese 7 will ich in diesem fall haben, also die Nr. die fehlt.
FÜr diese Aufgabe willst du also 10 mal die Datei mit Locate durchsuchen lassen ?
Das wird schnell sehr langsam, ich würde das in einem Durchgang erledigen ... wenn möglich mit dem Index vorher noch über Scope Sätze ausschließen
Code: Alles auswählen
* Scopen wenn möglich ... z.B. auf Rechnungsdatum oder von bis Rechnungsnummern ....
aGibtEsNummern := {}
GoTop()
do while ! eof()
if ! field->ID $ aGibEsNummer // falls nicht merken
aadd(aGibEsNummer, field->ID)
endif
dbSkip()
endif
* nun haben wir die Liste mit den vorhandenen IDs ...
aSuchFehlene := {}
for x := 1 to 10 // Grenzen Dynamisch ist besser
if ! x $ aGibEsNummer // falls nicht merken
aadd(aSuchFehlene, x)
endif
next
aGibtEsNummern := nil
Re: In Datenbank nach Wert suchen
Verfasst: Do, 07. Dez 2017 8:55
von AUGE_OHR
vorti hat geschrieben: ↑Mi, 06. Dez 2017 15:48
Code: Alles auswählen
locate for field -> rnr = nRechnungsnr1
do while .not. Found()
wenn er bei einem LOCATE nichts findet steht er auf EOF()
Re: In Datenbank nach Wert suchen
Verfasst: Do, 07. Dez 2017 9:03
von vorti
Mein (Haupt-)Fehler ging schon bei select() los, jetzt passt alles.
Vielen Dank an alle die geholfen haben.
Re: In Datenbank nach Wert suchen
Verfasst: Do, 07. Dez 2017 12:42
von vorti
Ich hab nochmal ein ähnliches Problem.
Diesmal sind die SuchParameter dDatum1 u. dDatum2.
Das Problem ist nach wie vor lücken in der Zahlenreihe zu finden.
Meine Idee war erstmal alle Zahlen in ein Array zu packen.Das funzt leider nicht, da es zu viele sind.
D.h. gleich auswerten.
Nur leider habe ich keine Ahnung wie ich die Bedingung herstellen soll, dass er nur Zahlen beachtet, die das entsprechende Datum zugeordnet haben.
Re: In Datenbank nach Wert suchen
Verfasst: Do, 07. Dez 2017 16:03
von brandelh
schreibe mal bitte eine beispiel Tabelle mit Datum und Zahlen ... die Spalten auf die es ankommt und 4 bis 5 Zeilen,
deine Beschreibung ist nicht eindeutig...