Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Parameterabfrage aus VBA ausführen funzt nicht

Begonnen von newbee_ferdi, Februar 08, 2016, 10:50:42

⏪ vorheriges - nächstes ⏩

newbee_ferdi

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

el_gomero

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
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

MaggieMay

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()
Freundliche Grüße
MaggieMay

newbee_ferdi

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

ebs17

#4
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)
Mit freundlichem Glück Auf!

Eberhard

newbee_ferdi

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

MaggieMay

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".
Freundliche Grüße
MaggieMay

ebs17

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, ...
Mit freundlichem Glück Auf!

Eberhard