PARAMETERS-Deklaration in SQL (mit Zugriff auf Parameter einer For

25/09/2008 - 11:38 von Gerhard Mayer | Report spam
Hallo,

ich habe eine Abfrage, die auf 2 Parameter einer zuvor geschalteten
geöffneten Form zurückgreifen:

SELECT H.PID, H.Jahr, H.FinPos, H.HUEL, H.Buchungsdatum, H.Firma,
H.Begruendung, SUM(H.AngewiesenerBetrag) AS SumAngewiesenerBetrag,
P.Beschreibung, F.Bezeichnung
FROM HUEL AS H, Projekte AS P, Finanzposition AS F
WHERE H.PID = [Forms]![Kontoauszug_2007_Dialog].PID AND H.Jahr =
[Forms]![Kontoauszug_2007_Dialog].Jahr AND H.Fondsnummer = P.Fonds AND H.PID
= P.PID AND H.FinPos = F.FinPos
GROUP BY H.FinPos, H.HUEL, H.PID, H.Jahr, H.Buchungsdatum, H.Firma,
H.Begruendung, P.Beschreibung, F.Bezeichnung
ORDER BY H.FinPos, H.HUEL;

Per Formular kann ich die Abfrage korrekt ausführen.

Jetzt möchte ich die Abfrage aber von VB-Code aus aufrufen. Wenn ich die
Form geöffnet habe und dann folgenden Code ausführe:

Dim dbsHaushalt As DAO.Database
Dim rst As DAO.Recordset2
Dim strSQL As String
Dim strParm As String

If strJahr = "2007" Then
strParm = "PARAMETERS [Forms]![Kontoauszug_2007_Dialog].[PID] TEXT, " & _
"[Forms]![Kontoauszug_2007_Dialog].[Jahr] INTEGER; "
End If

strSQL = strParm & "SELECT COUNT(*) AS Anzahl FROM Verbrauch_" & _
strJahr & " WHERE FinPos=" & strFinPos

Set dbsHaushalt = OpenDatabase(GetDBPath() & GetDBName())
Set rst = dbsHaushalt.OpenRecordset(strSQL, dbOpenDynaset)

GetCountsFromDynamicVER200x = rst.Fields("Anzahl").value

erhalte ich beim OpenRecordset die Fehlermeldung 3061:
"2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben."

Deshalb meine Frage: wie muß die PARAMETERS-Anweisung in SQL aussehen, wenn
sich die beiden Parameter auf das geöffnete Formular beziehen?

Gruß
Gerhard Mayer
 

Lesen sie die antworten

#1 Karl Donaubauer
25/09/2008 - 11:49 | Warnen spam
Gerhard Mayer wrote:
ich habe eine Abfrage, die auf 2 Parameter einer zuvor geschalteten
geöffneten Form zurückgreifen:

SELECT H.PID, H.Jahr, H.FinPos, H.HUEL, H.Buchungsdatum, H.Firma,
H.Begruendung, SUM(H.AngewiesenerBetrag) AS SumAngewiesenerBetrag,
P.Beschreibung, F.Bezeichnung
FROM HUEL AS H, Projekte AS P, Finanzposition AS F
WHERE H.PID = [Forms]![Kontoauszug_2007_Dialog].PID AND H.Jahr > [Forms]![Kontoauszug_2007_Dialog].Jahr AND H.Fondsnummer = P.Fonds AND
H.PID = P.PID AND H.FinPos = F.FinPos
GROUP BY H.FinPos, H.HUEL, H.PID, H.Jahr, H.Buchungsdatum, H.Firma,
H.Begruendung, P.Beschreibung, F.Bezeichnung
ORDER BY H.FinPos, H.HUEL;

Per Formular kann ich die Abfrage korrekt ausführen.

Jetzt möchte ich die Abfrage aber von VB-Code aus aufrufen. Wenn ich die
Form geöffnet habe und dann folgenden Code ausführe:

Dim dbsHaushalt As DAO.Database
Dim rst As DAO.Recordset2
Dim strSQL As String
Dim strParm As String

If strJahr = "2007" Then
strParm = "PARAMETERS [Forms]![Kontoauszug_2007_Dialog].[PID] TEXT, "
& _ "[Forms]![Kontoauszug_2007_Dialog].[Jahr] INTEGER; "
End If

strSQL = strParm & "SELECT COUNT(*) AS Anzahl FROM Verbrauch_" & _
strJahr & " WHERE FinPos=" & strFinPos
...
erhalte ich beim OpenRecordset die Fehlermeldung 3061:
"2 Parameter wurden erwartet, aber es wurden zu wenig Parameter
übergeben."

Deshalb meine Frage: wie muß die PARAMETERS-Anweisung in SQL aussehen,
wenn sich die beiden Parameter auf das geöffnete Formular beziehen?



Grundsàtzlich s.
www.donkarl.com?FAQ6.16
www.donkarl.com?FAQ6.4

Du kannst alternativ auch den SQL-Text der Abfrage im Code verwenden
und die aktuellen Formularwerte direkt übergeben, also ca.

strSQL = "SELECT ... " & _
" WHERE H.PID = " & [Forms]![Kontoauszug_2007_Dialog]!PID & _
" AND H.Jahr = " & [Forms]![Kontoauszug_2007_Dialog]!Jahr & _
" AND ..."


HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com, jetzt mit Anmeldung und Info
zur Access-Entwickler-Konferenz (AEK11), Oktober 2008, Nürnberg

Ähnliche fragen