Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Xoar am Februar 03, 2017, 14:59:43

Titel: Filter über wahlweise eins bis drei Kriterien
Beitrag von: Xoar am Februar 03, 2017, 14:59:43
Hallo,

habe in meiner Datenbank die grobe Filterung der Datensätze über verknüpfen von/nach gemacht. HF -》 Ufo. Das klappt gut

Jetzt hab ich im HF drei Checkboxen die wahlweise gedrückt werden können. Dadurch soll das Ufo im Feld [Wachabteilung] gefiltert werden.
Also wenn Checkbox1 geklickt alle wo Wachabteilung = 1, Checkbox2 = Wachabteilung = 2.
So jetzt können diese ja kombiniert werden, sprich wo Wachabteilung = 1 oder 2 ist.

Kann man ein Filterkrierium bauen, was den In () Operator nimmt?
Filterung = "in(1,2)"
Z.B. Me.Filter = "Wachabteilung = " & Filterung ?

Oder wie stellt man sowas am besten an?

Grüße
Titel: Re: Filter über wahlweise eins bis drei Kriterien
Beitrag von: el_gomero am Februar 03, 2017, 15:11:27
Moin,

nimm statt der Checkbox als Auswahl ein Listenfeld mit Mehrfachauswahl und stell darin alle Möglichkeiten zur Verfügung.
Titel: Re: Filter über wahlweise eins bis drei Kriterien
Beitrag von: Lachtaube am Februar 03, 2017, 15:11:36
Das Gleichheitszeichen im Filterausdruck macht diesen ungültig (fehlerhaft).
Titel: Re: Filter über wahlweise eins bis drei Kriterien
Beitrag von: DF6GL am Februar 03, 2017, 15:54:05
Hallo,

etwa so:

Sub Checkbox1_Click()
Me!UFO_StElem_Name.Form.Filter = "Wachabteilung = " & -(Me!Checkbox1) & " Or Wachabteilung = " & -2 * (Me!Checkbox2)
Me!UFO_StElem_Name.Form.FilterOn =True
End Sub

Sub Checkbox2_Click()
Checkbox1_Click
End Sub



oder mit IN-Operator:

Me!UFO_StElem_Name.Form.Filter = "Wachabteilung IN (" & -(Me!Checkbox1) & "," & -2 * (Me!Checkbox2) & ")"
Titel: Re: Filter über wahlweise eins bis drei Kriterien
Beitrag von: Xoar am Februar 03, 2017, 16:25:28
Ich danke euch vielmals.
[edit]
war leider noch nicht genau das was ich gesucht hatte, bzw war da noch nen Syntaxfehler drin statt & -2(Me!Checkbox2) musste ich & 2 - Me!Checkbox2 schreiben.


Dim Filterstr As String
Filterstr = "Wachabteilung IN ("
If Form_frmDienstplan.HakenWa1 = True Then Filterstr = Filterstr & "1,"
If Form_frmDienstplan.HakenWa2 = True Then Filterstr = Filterstr & "2,"
If Form_frmDienstplan.HakenWa3 = True Then Filterstr = Filterstr & "3,"
Filterstr = Left(Filterstr, Len(Filterstr) - 1) & ")"

Form_frmDienstplan!ufrmDienstplan.Form.Filter = Filterstr
Form_frmDienstplan!ufrmDienstplan.Form.FilterOn = True


so hab ich das gewünschte Ergebnis. Ist als Sub in einem Modul ausgelagert und wird bei jedem "Checkbox Klick" aufgerufen.
Titel: Re: Filter über wahlweise eins bis drei Kriterien
Beitrag von: DF6GL am Februar 03, 2017, 21:16:30
Hallo,

eher nicht,

es fehlt(e) ein Sternchen bei der Berechnung..

... & -2 * (Me!Checkbox2)

Titel: Re: Filter über wahlweise eins bis drei Kriterien
Beitrag von: Josef P. am Februar 03, 2017, 21:25:48
Hallo!

Noch eine Anregung zu deinem Code:

Deine Logik etwas anders formuliert:
Dim Filterstr As String

If Form_frmDienstplan.HakenWa1 = True Then Filterstr = Filterstr & ",1"
If Form_frmDienstplan.HakenWa2 = True Then Filterstr = Filterstr & ",2"
If Form_frmDienstplan.HakenWa3 = True Then Filterstr = Filterstr & ",3"

if len(Filterstr) > 0 then
   Filterstr = "Wachabteilung IN (" & mid(Filterstr, 2) & ")"
end If

... jetzt funktioniert der Filter auch, wenn keine Checkbox aktiviert ist.

Falls das Formular mit diesem Code das Formular frmDienstplan ist, würde ich statt Form_frmDienstplan.HakenWa1 nur Me.HakenWa1 schreiben.


Oder mittels Hilfsklasse SqlTools (http://source.access-codelib.net/filedetails.php?repname=CodeLib+(Entwurf%2C+branches%2Fdraft)&path=%2Fdata%2FSqlTools.cls):
Filterstr  = SqlTools.BuildCriteria("Wachabteilung", SQL_Numeric, SQL_In, Array(Abs(1 * Me.HakenWa1.Value), Abs(2 * Me.HakenWa2.Value), Abs(3 * Me.HakenWa3.Value)), , 0)

mfg
Josef
Titel: Re: Filter über wahlweise eins bis drei Kriterien
Beitrag von: Xoar am Februar 04, 2017, 08:44:36
Danke, gute Idee