Hi,
Ich habe in meiner Datenbank ein Formular, mit dem die Datensätze (Prüfungsfragen) nach bis zu 3 verschiedenen Kriterien gefiltert werden können.
Bislang habe ich 8 Verschiedene Abfragen + Berichte und eine 8-Fache If-Verkettung fragt anhand der ausgefüllten Kriterienfelder ab, welcher Bericht benötigt wird. Sollte ich jedoch noch weitere Kriterien hinzufügen, würde die Anzahl an kombinationsmöglichkeiten zu groß für diesen Lösungsweg werden.
Nun Versuche ich nur einen Bericht zu erstellen, der auf eine Abfrage zugreift, die dynamisch angelegt wird, je nachdem welche Kriterien angewählt werden.
Ich dachte ich könnte je Filterkriterium einen Textbaustein erstellen, die ich im VBA zusammensetzte.
Hier komme ich jedoch nicht weiter, da der "FROM-Teil" im SQL in inneren Klammern verkettet wird, die sich nicht einfach so zusammensetzen lassen...
Hat jemand eine Idee ob und wie ich das gelöst bekomme?
Zitat von: lennard1001 am Oktober 17, 2021, 18:59:44Bislang habe ich 8 Verschiedene Abfragen + Berichte und eine 8-Fache If-Verkettung fragt anhand der ausgefüllten Kriterienfelder ab, welcher Bericht benötigt wird.
[...]
Nun Versuche ich nur einen Bericht zu erstellen, der auf eine Abfrage zugreift, die dynamisch angelegt wird, je nachdem welche Kriterien angewählt werden.
Ich habe den Verdacht, dass du hier nicht auf den richtigen Weg bist.
Worin unterscheiden sich denn die 8 verschiedenen Abfragen und Berichte?
Vielleicht wäre es hilfreich, wenn du mal exemplarisch das SQL von 2 dieser verschiedenen Abfragen hier posten würdest.
Und ein Bild des Beziehungsfensters. Ein Blick auf das Datenmodell
könnte nützlich für eine Hilfe sein.
Hi,
dass die If-Verkettung stümperhaft ist, war mir klar, aber besser konnte ich es bislang nicht und funktioniert hat es ja erstmal.
Hier ein Bild des Formulars, mit dem bislang der passende Bericht rausgesucht wird.: https://ibb.co/nj3XKLN
(für jede kombinationsmöglichkeit gibt es einen gleichartigen Bericht, der auf die passende Abfrage zugreift.)
Und hier ein Bild der Abfrage, für den Fall das nach allen drei Kriterien gefiltert wird.:https://ibb.co/RT9P79Z
Hier sind ja auch die relevanten Beziehungen und der Aufbau zu erkennen.
Hier z.B. eine Abfrage, wenn nur nach einem Kriterium gefiltert werden soll.: https://ibb.co/dGy9zTw
Folgenden Code habe ich mit Hilfe des Internets gebastelt.
Damit kann ich den Kern der Abfrage schon erzeugen.
Private Sub cmdBerichtErstellen_Click()
Dim queryZFrage As DAO.QueryDef
Dim strSQL As String
'Abfrageelemente für Ausbildungsstand
Dim strA As String
strA = ""
'Abfrage löschen falls vorhanden
If DCount("*", "MsysObjects", "Name='qryZFrage' And Type = 5") > 0 Then
DoCmd.DeleteObject acQuery, "qryZFrage"
End If
'Abfrage erstellen
Set queryZFrage = CurrentDb().CreateQueryDef("qryZFrage") 'für Abfrage
strSQL = _
"SELECT tblFrage.FrageID, tblFrage.Frage, tblFrage.Antwort, tblFrage.Löschvermerk" & _
" FROM tblFrage" & _
" WHERE (((tblFrage.Löschvermerk)=No))" & _
" ORDER BY tblFrage.FrageID;"
queryZFrage.SQL = strSQL
Set queryZFrage = Nothing
End Sub
Leider kenne ich mich mit SQL nicht gut genug aus.
Die Inner Joins auf tblFrage werden alle ineinander verschachtelt und lassen sich soweit ich das erkennen kann nicht einfach aneinander setzten...
Hier noch der das SQL Beispiel zur Abfrage mit allen drei Kriterien:
SELECT tblFrage.FrageID, tblFrage.Frage, tblFrage.Antwort, tblSchlagwort.Schlagwort, lstThemengebiet.Themengebiet, lstAusbildungsstand.Ausbildungsstand, tblSchlagwort.SchlagwortID, lstAusbildungsstand.AusbildungsstandID, lstThemengebiet.ThemengebietID
FROM tblSchlagwort INNER JOIN (((lstAusbildungsstand INNER JOIN tblFrage ON lstAusbildungsstand.AusbildungsstandID = tblFrage.AusbildungsstandFK) INNER JOIN tblVerbindungSchlagwortFrage ON tblFrage.FrageID = tblVerbindungSchlagwortFrage.FrageFK) INNER JOIN (lstThemengebiet INNER JOIN tblVerbindungThemengebietFrage ON lstThemengebiet.ThemengebietID = tblVerbindungThemengebietFrage.ThemengebietFK) ON tblFrage.FrageID = tblVerbindungThemengebietFrage.FrageFK) ON tblSchlagwort.SchlagwortID = tblVerbindungSchlagwortFrage.SchlagwortFK
WHERE (((tblSchlagwort.SchlagwortID)=[Formulare]![frmZusammenstellungFrage]![cboSchlagwort]) AND ((lstAusbildungsstand.AusbildungsstandID)<=[Formulare]![frmZusammenstellungFrage]![cboAusbildungsstand]) AND ((lstThemengebiet.ThemengebietID)=[Formulare]![frmZusammenstellungFrage]![cboThemengebiet]) AND ((tblFrage.Löschvermerk)=No))
ORDER BY tblFrage.FrageID;
Hallo,
das gleichzeitige Posten der gleichen Frage in mehreren Foren ist unerwünscht. Kann in den Forenregeln nachgelesen werden.
Zumindest sollte es einen Link geben wenn man schon mehrere Foren beschäftigt.
https://www.ms-office-forum.net/forum/showthread.php?t=377350
Ok, das wusste ich nicht,
aber ich möchte doch auch möglichst jemanden erreichen der mir weiterhilft, da ist es doch nur logisch es in mehreren Foren zu versuchen...
Hallo,
nein, im allgemeinen ist es in fast allen Foren unerwünscht.
Bei Access speziell ist eher nutzlos, denn es sind die gleichen Leute auf die du triffst.