Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: newbee_ferdi am Februar 08, 2016, 10:50:42

Titel: Parameterabfrage aus VBA ausführen funzt nicht
Beitrag von: newbee_ferdi am Februar 08, 2016, 10:50:42
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
Titel: Re: Parameterabfrage aus VBA ausführen funzt nicht
Beitrag von: el_gomero am Februar 08, 2016, 11:43:37
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
Titel: Re: Parameterabfrage aus VBA ausführen funzt nicht
Beitrag von: MaggieMay am Februar 08, 2016, 12:00:07
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()
Titel: Re: Parameterabfrage aus VBA ausführen funzt nicht
Beitrag von: newbee_ferdi am Februar 08, 2016, 12:03:51
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
Titel: Re: Parameterabfrage aus VBA ausführen funzt nicht
Beitrag von: ebs17 am Februar 08, 2016, 12:21:28
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)
Titel: Re: Parameterabfrage aus VBA ausführen funzt nicht
Beitrag von: newbee_ferdi am Februar 08, 2016, 15:19:23
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
Titel: Re: Parameterabfrage aus VBA ausführen funzt nicht
Beitrag von: MaggieMay am Februar 08, 2016, 15:40:42
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".
Titel: Re: Parameterabfrage aus VBA ausführen funzt nicht
Beitrag von: ebs17 am Februar 08, 2016, 17:41:28
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, ...