Funktion kann beim Ausführen einer Abfrage kein Formular öffnen?

11/12/2007 - 08:08 von Stefan Dase | Report spam
Guten Morgen allerseits!

Ich plage mich gerade mit einer Fehlermeldung herum, bei der ich keine
Lösung weiß. In einer Verwaltungsdatenbank müssen die Benutzer vor dem
Startbildschirm eine Auswahl treffen, welches Projekt sie bearbeiten
wollen. Ich habe dafür eine kleine Funktion "getSelectedOrder(): Long"
erstellt, die entweder eine bereits getroffene Auswahl zurückgibt (wird
als private Variable gespeichert) bzw. ein Auswahlformular anzeigt, die
dort getroffene Auswahl in der privaten Variable speichert und dann den
Wert zurückgibt.

Beim Fehlersuchen habe ich nun festgestellt, dass diese Funktion zwar
wunderbar funktioniert, solange ich schon einen Wert ausgewàhlt habe,
oder mein Startformular öffne. Sobald aber eine Abfrage ausgeführt wird,
die den Rückgabewert aus der Funktion als Kriterium verwendet, erhalte
ich den Laufzeutfehler 2486 "Sie können diese Aktion momentan nicht
ausführen." Die Hilfe schweigt sich dazu leider aus.

Hier die Funktion:

Public Function getSelectedOrder(Optional NewSelection As
Boolean = False) As Long

If (m_iSelectedOrder = 0) Or (NewSelection = True) Then
'open select order form
DoCmd.OpenForm ORDER_SEL_FRM, , , , , acDialog, _
"HideIfInserted=True"

'eval user input
If SysCmd(acSysCmdGetObjectState, acForm, ORDER_SEL_FRM) <> 0 Then
m_iSelectedOrder = Forms(ORDER_SEL_FRM).SelectedOrderID
DoCmd.Close acForm, ORDER_SEL_FRM
Else
Call closeDBWhenNoAdmin
End If
End If

getSelectedOrder = m_iSelectedOrder

End Function

Die Ausführung stoppt auf dem DoCmd.OpenForm. Und hier eine
exemplarische Abfrage:

SELECT
T.Test_ID,
...
FROM
t_Test AS T
WHERE
T.Order_ID = getSelectedOrder()
ORDER BY
T.TestDocument;

Ich vermute mal, dass beim Öffnen/Ausführen einer Abfrage kein Formular
geöffnet werden kann. Kann das jemand bestàtigen? Und wie kann ich das
umgehen? Die Anwender hatten diesen Effekt bisher zum Glück nicht, aber
wenn ein anderer Fehler auftritt und der Anwender "Beenden" auswàhlt,
dann ist der Variablenwert gelöscht und würde somit wieder abgefragt werden.

Viele Grüße,
Stefan
 

Lesen sie die antworten

#1 Karl Donaubauer
11/12/2007 - 10:33 | Warnen spam
Hallo, Stefan!

Stefan Dase wrote:
Ich plage mich gerade mit einer Fehlermeldung herum, bei der ich keine
Lösung weiß. In einer Verwaltungsdatenbank müssen die Benutzer vor dem
Startbildschirm eine Auswahl treffen, welches Projekt sie bearbeiten
wollen. Ich habe dafür eine kleine Funktion "getSelectedOrder(): Long"
erstellt, die entweder eine bereits getroffene Auswahl zurückgibt (wird
als private Variable gespeichert) bzw. ein Auswahlformular anzeigt, die
dort getroffene Auswahl in der privaten Variable speichert und dann den
Wert zurückgibt.

Beim Fehlersuchen habe ich nun festgestellt, dass diese Funktion zwar
wunderbar funktioniert, solange ich schon einen Wert ausgewàhlt habe,
oder mein Startformular öffne. Sobald aber eine Abfrage ausgeführt wird,
die den Rückgabewert aus der Funktion als Kriterium verwendet, erhalte
ich den Laufzeutfehler 2486 "Sie können diese Aktion momentan nicht
ausführen." Die Hilfe schweigt sich dazu leider aus.

Hier die Funktion:

Public Function getSelectedOrder(Optional NewSelection As
Boolean = False) As Long

If (m_iSelectedOrder = 0) Or (NewSelection = True) Then
'open select order form
DoCmd.OpenForm ORDER_SEL_FRM, , , , , acDialog, _
"HideIfInserted=True"

'eval user input
If SysCmd(acSysCmdGetObjectState, acForm, ORDER_SEL_FRM) <> 0 Then
m_iSelectedOrder = Forms(ORDER_SEL_FRM).SelectedOrderID
DoCmd.Close acForm, ORDER_SEL_FRM
Else
Call closeDBWhenNoAdmin
End If
End If

getSelectedOrder = m_iSelectedOrder

End Function

Die Ausführung stoppt auf dem DoCmd.OpenForm. Und hier eine
exemplarische Abfrage:

SELECT
T.Test_ID,
...
FROM
t_Test AS T
WHERE
T.Order_ID = getSelectedOrder()
ORDER BY
T.TestDocument;

Ich vermute mal, dass beim Öffnen/Ausführen einer Abfrage kein Formular
geöffnet werden kann. Kann das jemand bestàtigen? Und wie kann ich das
umgehen? Die Anwender hatten diesen Effekt bisher zum Glück nicht, aber
wenn ein anderer Fehler auftritt und der Anwender "Beenden" auswàhlt,
dann ist der Variablenwert gelöscht und würde somit wieder abgefragt
werden. ...



Der Fehler wegen der Gleichzeitigkeit wundert mich nicht wirklich.
Warum veranstaltest du denn die Prüfung deiner Bedingungen und
ggf. das Öffnen des Formulares nicht vor dem Öffnen der Abfrage
und machst in der Funktion nur das Zurückliefern des Variablenwertes?

cu
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
Access-Entwickler-Konferenz: www.donkarl.com/?AEK
SQL Server-Entwickler-Konferenz: www.donkarl.com/?SEK

Ähnliche fragen