Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Biesdorfer am März 08, 2016, 15:41:25

Titel: kombinierter formularbasierter Filter mit ">="
Beitrag von: Biesdorfer am März 08, 2016, 15:41:25
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?
Titel: Re: kombinierter formularbasierter Filter mit ">="
Beitrag von: MaggieMay am März 08, 2016, 15:55:35
Hallo,

das funktioniert so nicht, der Operator kann keine Variable sein.
Statt dessen kannst/musst du den SQL-Code zur Laufzeit dynamisch erzeugen.
Titel: Re: kombinierter formularbasierter Filter mit ">="
Beitrag von: Biesdorfer am März 08, 2016, 16:06:26
Aha, und das macht man genau wie?  :-\
Titel: Re: kombinierter formularbasierter Filter mit ">="
Beitrag von: MaggieMay am März 08, 2016, 16:57:44
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.
Titel: Re: kombinierter formularbasierter Filter mit ">="
Beitrag von: Beaker s.a. am März 08, 2016, 17:15:38
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
Titel: Re: kombinierter formularbasierter Filter mit ">="
Beitrag von: MaggieMay am März 08, 2016, 17:57:40
Hi,

ich sehe da Hochkommata (um den Operator) wo keine hingehören - kann das sein?
Titel: Re: kombinierter formularbasierter Filter mit ">="
Beitrag von: Beaker s.a. am März 08, 2016, 18:08:53
Hallo Maggie,
Kann schon sein, getestet habe ich es nicht.
gruss ekkehard
Titel: Re: kombinierter formularbasierter Filter mit ">="
Beitrag von: Biesdorfer am März 09, 2016, 10:30:44
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
Titel: Re: kombinierter formularbasierter Filter mit ">="
Beitrag von: MaggieMay am März 09, 2016, 11:15:02
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.