Hallo Community und hilfreiche Geister!
Ich stehe vor dem Problem, dass ich eine Parameterabfrage aus VBA heraus ausführen möchte und ..... stehe kurz vor einer Verzweifelungstat ;-)
Ich hab mir bei donkarl die erforderlichen Kode-Schnipsel besorgt (dafür schon mal vielen Dank!) aber ich bekomme es nicht hin.
Weitestgehender Fortschritt (nach dem Ausräumen von gefühlt 12 anderen Fehlern) ist ein Programmabbruch mit der Fehlermeldung: "Eine Abfrage kann nicht ausgeführt werden" - bei der Anweisung: qdf.execute.
Hier der Programmkode aus meiner Sub:
Private Sub footer6_Click()
Dim db As dao.Database
Dim rs As dao.Recordset
Dim qdf As dao.QueryDef
Set db = CurrentDb
Set qdf = db.QueryDefs("qryMonatsfilter")
qdf.Parameters!Buchungsmonat = intAuswahl(1)
Set rs = qdf.OpenRecordset(dbOpenDynaset)
qdf.Execute
DoCmd.OpenForm ("frmMonatsfilter")
End Sub
Der Parameter in "intAuswahl(1) wird korrekt und verträglich bereitgestellt.
Die query sieht (als screenshot) aus, wie im Anhang zu sehen.
Wenn ich den "qdf.execute" auskommentiere läuft der Kode durch und die Form wird geladen ... und fragt (natürlich) den Parameter ab. :-(
Vielen Dank im Voraus für jede Art von Hilfe!
Gruß
Ferdi
Hallo,
was ist denn intAuswahl(1)? Und warum ein Recordset öffnen, wenn nur eine Abfrage ausgeführt werden soll?
Das auszuführende SQL-Statement kannst du dir ausgeben lassen und prüfen:
Private Sub footer6_Click()
Dim db As dao.Database
Dim rs As dao.Recordset
Dim qdf As dao.QueryDef
Set db = CurrentDb
Set qdf = db.QueryDefs("qryMonatsfilter")
qdf.Parameters!Buchungsmonat = intAuswahl(1)
debug.print qdf.SQL
Set qdf = Nothing
Set db = Nothing
End Sub
Hallo,
wenn das Formular an die Abfrage gebunden ist, dann funktioniert das so nicht, sondern du kannst den Parameter mit Hilfe einer Funktion in die Abfrage holen.
Beispiel:
Public Function get_P1()
get_P1 = intAuswahl(1)
End Function
Und in der Abfrage schreibst du anstelle von "[Buchungsmonat ]" den Funktionsaufruf:
get_P1()
Hallo Jürgen und vielen Dank für deine Antwort!
Leider hilft sie aus 2 Gründen nur wenig weiter: auch wenn ich kein Recordset öffne, funzt es nicht (gleicher Fehlerabbruch) und den Sql-Auszug kann ich nicht auf Sinnhaftigkeit oder Fehler hin bewerten:
"
SELECT tblBuchungen.refSachkonto, Sum(tblBuchungen.Betrag) AS SummevonBetrag
FROM tblBuchungen
WHERE (((Month([Buchungsdatum]))=[Buchungsmonat]))
GROUP BY tblBuchungen.refSachkonto
HAVING (((tblBuchungen.refSachkonto)<>9 And (tblBuchungen.refSachkonto)<>51));
"
Über die Variable intAuswahl(1) übergebe ich den Parameter an die Abfrage (2 für Februar).
Ferdi
Zur Technik Parameterabfrage per VBA (DAO):
Private Sub footer6_Click()
Dim db As dao.Database
Dim rs As dao.Recordset
Dim qdf As dao.QueryDef
Set db = CurrentDb
Set qdf = db.QueryDefs("qryMonatsfilter")
qdf.Parameters!Buchungsmonat = intAuswahl(1)
Set rs = qdf.OpenRecordset(dbOpenDynaset)
'qdf.Execute ' nur Aktionsabfragen können ausgeführt werden
DoCmd.OpenForm "frmMonatsfilter"
' erzeugtes Recordset auch verwenden!
Set Forms("frmMonatsfilter").Recordset = rs
' ... weitere Anweisungen
End Sub
Du könntest als Datenherkunft für das Formular auch eine Abfrage ohne diesen Filter verwenden und diesen Filter dann beim OpenForm übergeben:
Abfrage richtig und übersichtlich formuliert
SELECT refSachkonto, Sum(Betrag) AS SummevonBetrag
FROM tblBuchungen
WHERE refSachkonto<>9 And refSachkonto<>51
GROUP BY refSachkonto
DoCmd.OpenForm "frmMonatsfilter", , , "Month[Buchungsdatum) = " & intAuswahl(1)
Hi Maggie und Eberhard!
Vielen lieben Dank für euren Input .... ich arbeite noch an der Lösung, die dann auch in meinem DB - Entwurft funzt. ... Inzwischen vermute ich, dass ich in der zu Grunde liegenden Abfrage ein Problem habe.
By the way .... kann es sein, dass man irgendwann nicht nur nicht umhinkommt, sich mit VBA auseinander zu setzen, wenn man Access an seine persönlichen Vorlieben anpassen möchte, sondern obendrein auch noch in SQL sattelfest werden sollte???
Gosh .... wie lange soll dieser Lernprozess denn noch werden ???
;)
Gruß,
Ferdi
Zitatkann es sein, [...]
Ja, so kann man das wohl sagen. :)
Zitatwie lange soll dieser Lernprozess denn noch werden
Das ist vermutlich eine "never ending Story".
Zitatsondern obendrein auch noch in SQL sattelfest werden sollte???
Wenn Du mit Access nicht Flipper oder andere Spielchen bauen willst, sondern richtige Datenbankarbeit umsetzen willst, ist die Datenbanksprache SQL ein MUSS - und zwar nach m.M. nicht irgendwann nach VBA, sondern sofort und unmittelbar.
Dafür gelten dann Kenntnisse auch über Access hinaus, SQL, wenn auch in anderen Dialekten, spricht man auch in SQL Server, MySQL, Oracle, DB2, Firebird, ...