Verständnisproblem LOKALE Variablen

14/01/2010 - 06:52 von Uwe Ricken | Report spam
Guten Morgen zusammen,

ich habe hier ein Problem, das fast schon làcherlich ist. Aber ich sehe hier
irgendwie den Wald vor lauter Bàumen nicht.
Ich habe eine Funktion, die aus einer Tabelle Konfigurationsdaten für das
Formular ausliest und das Formular entsprechend konfiguriert.
Der Aufbau sieht in etwa wie folgt aus (rudimentàr):

Public Function fn_app_InitForm(Optional initfrm As Form)
On Error Goto ErrorHandler
Dim frmrst As Object ' < LOKALE
DIMENSIONIERUNG

...

Set frmrst = Funktion_Für_RecordSet()

With frmrst
While Not (.Eof And .Bof)
' mach halt was
' eventuell kommt dann aber auch sowas, wenn z. B. in dem
Formular ein Unterformular vorhanden ist
Call fn_app_InitForm(Unterformular) ' < ERNEUTES
AUSFÜHREN FÜR ANDERES FORMULAR
Wend
End With

ExitCode:
On Error Resume Next
Set frmrst = Nothing
Exit Function

ErrorHandler:
...
...
Resume ExitCode
End Function

Wie man deutlich sehen kann, KANN die Funktion rekursiv aufgerufen werden.
Deswegen habe ich das RecordSet-Objekt in der Funktion deklariert. Nun
passiert es aber, dass ich NACH dem zweiten Aufruf in der WHILE-WEND
Schleife des ersten Aufrufs plötzlich folgenden Fehler erhalte:

3021 Either BOF or EOF is True, or the current record has been
deleted. Requested operation requires a current record.

Die Fehlermeldung ist eindeutig aber sie macht für mich eigentlich keinen
Sinn. Ich dachte immer, dass lokale Variablen immer im Kontext des Aufrufs
gültig sind. Somit müsste doch eigentlich bei der Rückkehr zur Hauptroutine
dessen Objekt frmRst noch gültig sein.
Habe ich da über viele Jahre was falsch verstanden?

Herzlichen Dank für ein bisschen Erleuchtung ;-)

Uwe Ricken
db Berater GmbH
http://www.db-berater.de

MCTS: Microsoft SQL Server 2005
MCDBA: Microsoft SQL Server 2005
 

Lesen sie die antworten

#1 Mark Doerbandt
14/01/2010 - 09:51 | Warnen spam
Hallo, Uwe,

Uwe Ricken:

While Not (.Eof And .Bof)
' mach halt was
' eventuell kommt dann aber auch sowas, wenn z. B. in dem
Formular ein Unterformular vorhanden ist
Call fn_app_InitForm(Unterformular) ' < ERNEUTES
AUSFÜHREN FÜR ANDERES FORMULAR
Wend

Wie man deutlich sehen kann, KANN die Funktion rekursiv aufgerufen werden.
Deswegen habe ich das RecordSet-Objekt in der Funktion deklariert. Nun
passiert es aber, dass ich NACH dem zweiten Aufruf in der WHILE-WEND
Schleife des ersten Aufrufs plötzlich folgenden Fehler erhalte:

3021 Either BOF or EOF is True, or the current record has been
deleted. Requested operation requires a current record.



hmm... Die bedingung .Eof And .Bof irritiert mich etwas, denn die
tritt ja auf, wenn das Teil leer ist. Müsste da nicht einfach

While Not .Eof stehen?

(Ich vermute, irgendwo steht noch ein .MoveNext.)

Gruss - Mark

Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beitràge senden.

Ähnliche fragen