Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

kombinierter formularbasierter Filter mit ">="

Begonnen von Biesdorfer, März 08, 2016, 15:41:25

⏪ vorheriges - nächstes ⏩

Biesdorfer

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?

MaggieMay

Hallo,

das funktioniert so nicht, der Operator kann keine Variable sein.
Statt dessen kannst/musst du den SQL-Code zur Laufzeit dynamisch erzeugen.
Freundliche Grüße
MaggieMay

Biesdorfer


MaggieMay

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

Beaker s.a.

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 sub

Als Filter:
VergleichsfeldAusTabelle & "'" & Forms!DeinFormular!DeinKombi1 & "' " & Forms!DeinFormular!DeinKombi2
Forms!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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MaggieMay

Hi,

ich sehe da Hochkommata (um den Operator) wo keine hingehören - kann das sein?
Freundliche Grüße
MaggieMay

Beaker s.a.

Hallo Maggie,
Kann schon sein, getestet habe ich es nicht.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Biesdorfer

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

MaggieMay

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