PDA

Vollständige Version anzeigen : rekursiver Aufruf


strausto
05.07.2006, 13:52
Hi!

Ich habe ein VB Skript erstellt, das aus einem SQL Server einen Export einer Procedure mit Header und Trailer generiert. Dafür benutze ich einen rekursiven Aufruf einer Funktion.
Am Ende erhalte ich die Fehlermeldung dass das Recordset entweder .EOF oder .BOF ist.
Im Einzelschrittmodus wird deutlich dass über .EOF des RS hinausgegangen wird, obwohl ich glaubte das abgefangen zu haben.

Wie kann ich das Problem lösen?!

Um das nachzustellen habe ich eine Access DB erstellt die den Code rudimentär wiedergibt aber dennoch das Kernproblem beschreibt.

Danke für Eure Hilfe!

FW
05.07.2006, 14:05
... es muss heißen
Do While .EOF = True
oder
Do Until .EOF = False
...

strausto
05.07.2006, 14:20
Insofern das Recordset Daten beinhaltet, ist .EOF immer False. Damit wird bei Deinem Vorschlag das RS nie durchlaufen. Die Function soll Daten an den Stream weitergeben bis EOF = True ist und somit alle DS exportiert wurden.

Hast Du noch eine andere Idee?

Danke!

FW
05.07.2006, 14:22
... entschuldige den Unsinn, war durch "= True" irritiert, fraage selbst immer until .Eof.
Du hast Recht, werde mir das jetzt mal genauer anschauen...

strausto
05.07.2006, 14:27
Ich habe die Lösung gefunden:
Do Until .EOF = True

lngSeqno_ = CLng(.Fields("SEQNO").Value)

If CLng(lngSeqno_) <> CLng(lngSeqno) Then
objStream.WriteLine sTrailer
Call WriteTextFile(objRecordset)
Exit Sub
End If
...

Dennoch danke!

FW
05.07.2006, 14:27
... da nach der Rekursion der DS-Zeiger ja womöglich bewegt wurde, musst Du doch dann noch mal explizit auf EOF abfragen:
...
objStream.WriteLine sDetail(objRecordset)
If Not .EOF Then .MoveNext
...
oder?