Hallo Leute,
stehe vor folgendem Problem:
In einem Formular habe ich 2 Kombinationsfelder.
Feld1 (sucheOperator) soll auswählen: ">=", "<=", "="
Feld2 (sucheJahr) soll auswählen: 2010, 2011, 2012, etc. (bis 2050)
Dies wird dann per formularbasiertem Filter als Kriterium in eine Abfrage geschrieben. siehe:[forms]![fmnu_Reports]![sucheOperator] & [forms]![fmnu_Reports]![sucheJahr]
Leider bekomme ich kein Ergebnis.
Habt ihr eine Idee?
Hallo,
das funktioniert so nicht, der Operator kann keine Variable sein.
Statt dessen kannst/musst du den SQL-Code zur Laufzeit dynamisch erzeugen.
Aha, und das macht man genau wie? :-\
Dazu musst du wohl erstmal genauer erklären, was du hiermit meinst:
ZitatDies wird dann per formularbasiertem Filter als Kriterium in eine Abfrage geschrieben.
Gibt es dazu VBA-Code, dann zeige ihn bitte.
Hallo Biesdorfer,
Unter der Voraussetzung, dass der Operator (>,= usw.) in der
gebundenen Spalte des Kombis steht (Jahr natürlich auch).
Private Sub PassendesEreignis()
Dim strSQL As String
strSQL = _
"SELECT blablabla ... " _
& "WHERE VergleichsfeldAusTabelle '" & Forms!DeinFormular!DeinKombi1 & "' " & Forms!DeinFormular!DeinKombi2
'Mach was mit der Abfrage
End subAls Filter:
VergleichsfeldAusTabelle & "'" & Forms!DeinFormular!DeinKombi1 & "' " & Forms!DeinFormular!DeinKombi2Forms!DeinFormular! kannst Du, wenn's auf dem aktiven Formular passiert durch Me! ersetzen.
Zitatals Kriterium in eine Abfrage geschrieben
Man kann per Code natürlich auch den SQL-String dieser Abfrage direkt verändern/ergänzen. Z.B. (sinnfrei)
QueryDefs!DeinAbfrage.SQL = Replace(QueryDefs!DeinAbfrage.SQL,"OR","AND")gruss ekkehard
P.S. Alles Luftcode
Hi,
ich sehe da Hochkommata (um den Operator) wo keine hingehören - kann das sein?
Hallo Maggie,
Kann schon sein, getestet habe ich es nicht.
gruss ekkehard
Hallo Leute,
vielen Dank für eure Antworten. Leider bin ich wohl zu sehr Laie um eure Ansätze nachvollziehen zu können. :(
Daher folge ich dem Rat von Maggie und poste mal meine komplette Abfrage als SQL-Code.
Vielleicht hat der Eine oder Andere ja Lust und Zeit sich der Sache nochmal anzunehmen.
SELECT qry_BT_PSR.MA_PNR, qry_BT_PSR.MA_Person, qry_BT_PSR.KST, qry_BT_PSR.KSTText, qry_BT_PSR.FBR, qry_BT_PSR.V_VB, qry_BT_PSR.V_VE, qry_BT_PSR.V_VEGrund, Year([V_VB]) AS Jahr, IIf(Month([V_VB])>9,Month([V_VB]),"0" & Month([V_VB])) AS Monat
FROM qry_BT_PSR
WHERE (((qry_BT_PSR.FBR) Like [forms]![fmnu_Reports]![sucheFB]) AND ((Year([V_VB]))=[forms]![fmnu_Reports]![sucheOperator] & [forms]![fmnu_Reports]![sucheJahr]) AND ((qry_BT_PSR.BezNr) Like [forms]![fmnu_Reports]![sucheBez]))
ORDER BY IIf(Month([V_VB])>9,Month([V_VB]),"0" & Month([V_VB]));
Viele Grüße
Biesdorfer
Hallo,
wenn du den SQL-Code der Abfrage per VBA zusammensetzt, sähe das bspw. so aus:
Dim strSQL As String
strSQL = "SELECT qry_BT_PSR.MA_PNR, qry_BT_PSR.MA_Person, qry_BT_PSR.KST, qry_BT_PSR.KSTText, qry_BT_PSR.FBR, qry_BT_PSR.V_VB, qry_BT_PSR.V_VE, qry_BT_PSR.V_VEGrund, YEAR([V_VB]) AS Jahr, " & _
"IIf(MONTH([V_VB])>9,MONTH([V_VB]),""0"" & MONTH([V_VB])) AS Monat " & _
"FROM qry_BT_PSR " & _
"WHERE ( " & _
"((qry_BT_PSR.FBR) LIKE [forms]![fmnu_Reports]![sucheFB]) AND " & _
"((YEAR([V_VB])) " & [forms]![fmnu_Reports]![sucheOperator] & [forms]![fmnu_Reports]![sucheJahr] & ") AND " & _
"((qry_BT_PSR.BezNr) LIKE [forms]![fmnu_Reports]![sucheBez])) " & _
"ORDER BY IIf(MONTH([V_VB])>9,MONTH([V_VB]),""0"" & MONTH([V_VB]));"
CurrentDB.QueryDefs("qry_xyz").SQL = strSQL
Damit wird der SQL-Code der Abfrage "qry_xyz" überschrieben, du musst nur noch den richtigen Namen einsetzen.
Anschließend wird das Formular aktualisiert - oder wo kommt die Abfrage zum Einsatz?
BTW:
Der Vergleich mit LIKE macht nur Sinn in Verbindung mit Suchmustern, andernfalls wäre "=" vorzuziehen.