Neuigkeiten:

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

Mobiles Hauptmenü

filtern

Begonnen von mmaatouk, April 09, 2015, 13:25:19

⏪ vorheriges - nächstes ⏩

mmaatouk

hallo
ich habe eine Formular von einem Abfrage erstellt
und brauche eine filter in diesem form zu erstellen
ich habe durch textfeld eingabe gefiltert aber der problem ist :
ich eine Status feld von 1 bis 5 und möchte zb
die daten die status 1 und 2 und 3 von dieses abfrage haben
aber ich bekomme immer 1 oder 2 oder 3 oder 4 oder 5
aber nicht zusammen

und noch frage für datum berecih wenn ich von einem datum bis andere datum suchen durch eingeben

MaggieMay

Hallo,

wie hast du das denn umgesetzt mit dem Filtern? Passiert das bereits in der Abfrage?

Zeig doch bitte mal den SQL- und/oder VBA-Code der hier zum Einsatz kommt.
Freundliche Grüße
MaggieMay

mmaatouk

hier ist mein code für formulare

Option Compare Database

Private Sub Text_Abgemeldet_AfterUpdate()
Dim i As Integer, varKrit As Variant, strKrit As String
   
    varKrit = Split(Nz(Me!Text_Abgemeldet, ""), ";")
    For i = 0 To UBound(varKrit)
        strKrit = strKrit & " OR [Status] Like '*" & varKrit(i) & "*'"
    Next i
    Me.filter = Mid(strKrit, 5)
    Me.FilterOn = True
    Me.Requery
   
End Sub

Private Sub Text_AKtiv_AfterUpdate()

    Dim i As Integer, varKrit As Variant, strKrit As String
   
    varKrit = Split(Nz(Me!Text_AKtiv, ""), ";")
    For i = 0 To UBound(varKrit)
        strKrit = strKrit & " OR [Status] Like '*" & varKrit(i) & "*'"
    Next i
    Me.filter = Mid(strKrit, 5)
    Me.FilterOn = True
Me.Requery
End Sub

Private Sub Text_Fällig_AfterUpdate()
Dim i As Integer, varKrit As Variant, strKrit As String
   
    varKrit = Split(Nz(Me!Text_Fällig, ""), ";")
    For i = 0 To UBound(varKrit)
        strKrit = strKrit & " OR [Status] Like '*" & varKrit(i) & "*'"
    Next i
    Me.filter = Mid(strKrit, 5)
    Me.FilterOn = True
    Me.Requery
End Sub

Private Sub Text_Gesperrt_AfterUpdate()
Dim i As Integer, varKrit As Variant, strKrit As String
   
    varKrit = Split(Nz(Me!Text_Gesperrt, ""), ";")
    For i = 0 To UBound(varKrit)
        strKrit = strKrit & " OR [Status] Like '*" & varKrit(i) & "*'"
    Next i
    Me.filter = Mid(strKrit, 5)
    Me.FilterOn = True
    Me.Requery
End Sub

Private Sub Text_Nicht_Überwacht_AfterUpdate()
Dim i As Integer, varKrit As Variant, strKrit As String
   
    varKrit = Split(Nz(Me!Text_Nicht_Überwacht, ""), ";")
    For i = 0 To UBound(varKrit)
        strKrit = strKrit & " OR [Überwachung] Like '*" & varKrit(i) & "*'"
    Next i
    Me.filter = Mid(strKrit, 5)
    Me.FilterOn = True
    Me.Requery
End Sub

Private Sub Text_Stillgelegt_AfterUpdate()
Dim i As Integer, varKrit As Variant, strKrit As String
   
    varKrit = Split(Nz(Me!Text_Stillgelegt, ""), ";")
    For i = 0 To UBound(varKrit)
        strKrit = strKrit & " OR [Status] Like '*" & varKrit(i) & "*'"
    Next i
    Me.filter = Mid(strKrit, 5)
    Me.FilterOn = True
    Me.Requery
End Sub

Private Sub Text_Überwacht_AfterUpdate()
Dim i As Integer, varKrit As Variant, strKrit As String
   
    varKrit = Split(Nz(Me!Text_Überwacht, ""), ";")
    For i = 0 To UBound(varKrit)
        strKrit = strKrit & " OR [Überwachung] Like '*" & varKrit(i) & "*'"
    Next i
    Me.filter = Mid(strKrit, 5)
    Me.FilterOn = True
    Me.Requery
End Sub

Private Sub Txt_Ansprech_AfterUpdate()
Me.Requery
End Sub

Private Sub Txt_Art_AfterUpdate()
Me.Requery
End Sub

Private Sub Txt_InvNr_AfterUpdate()
Me.Requery
End Sub

Private Sub Txt_MMVerantw_AfterUpdate()
Me.Requery
End Sub

Private Sub Txt_Serial_AfterUpdate()
Me.Requery
End Sub

Private Sub Txt_Typ_AfterUpdate()
Me.Requery
End Sub

Private Sub Txt_Verbleib_AfterUpdate()
Me.Requery
End Sub

Private Sub cmdFilterLöschen_Click()
Me.Txt_Art = ""
Me.Txt_Ansprech = ""
Me.Txt_InvNr = ""
Me.Txt_MMVerantw = ""
Me.Txt_Serial = ""
Me.Txt_Typ = ""
Me.Txt_Verbleib = ""
Me.Text_AKtiv = ""
Me.Text_Fällig = ""
Me.Text_Gesperrt = ""
Me.Text_Stillgelegt = ""
Me.Text_Abgemeldet = ""
Me.Text_Überwacht = ""
Me.Text_Nicht_Überwacht = ""

Me.Requery
End Sub



und hier ist die SQL von abfrage

SELECT tbl_geräte_akt.[Inv-Nr], tbl_geräte_akt.NB, tbl_geräte_akt.Status, tbl_geräte_akt.Überwachung, tbl_geräte_akt.Art, tbl_geräte_akt.HW, tbl_geräte_akt.[Kalibriert am], tbl_geräte_akt.[Kalibrier Interval], tbl_geräte_akt.[Ser-Nr], tbl_geräte_akt.Verbleib
FROM tbl_geräte_akt
WHERE (((tbl_geräte_akt.[Inv-Nr]) Like "*" & [Formulare]![frmGeräte_Liste_10_filter]![Txt_InvNr] & "*") AND ((tbl_geräte_akt.NB)=10) AND ((tbl_geräte_akt.Art) Like "*" & [Formulare]![FrmGeräte_Liste_10_filter]![Txt_Art] & "*") AND ((tbl_geräte_akt.HW) Like "*" & [Formulare]![FrmGeräte_Liste_10_filter]![Txt_Typ] & "*") AND ((tbl_geräte_akt.[Ser-Nr]) Like "*" & [Formulare]![frmGeräte_Liste_10_filter]![Txt_Serial] & "*") AND ((tbl_geräte_akt.Verbleib) Like "*" & [Formulare]![frmGeräte_Liste_10_filter]![Txt_Verbleib] & "*") AND ((tbl_geräte_akt.[Ansprechpartner Name]) Like "*" & [Formulare]![frmGeräte_Liste_10_filter]![Txt_Ansprech] & "*") AND ((tbl_geräte_akt.[Ansprechpartner Vorname]) Like "*" & [Formulare]![frmGeräte_Liste_10_filter]![Txt_Ansprech] & "*") AND ((tbl_geräte_akt.[MMV Nachname]) Like "*" & [Formulare]![frmGeräte_Liste_10_filter]![Txt_MMVerantw] & "*") AND ((tbl_geräte_akt.[MMV Vorname]) Like "*" & [Formulare]![frmGeräte_Liste_10_filter]![Txt_MMVerantw] & "*"));

MaggieMay

Du filterst also einmal über die Abfrage und zusätzlich noch über weitere Formularfelder. Aber es steht immer dasselbe Datenfeld (Status) dahinter, ist das richtig?

Wie sieht denn bspw. eine Eingabe bei diesen Feldern aus und welcher ist der Fall, den du anders lösen möchtest?

PS:
Code-Auszüge bitte stets in Code-Tags einpacken.
Freundliche Grüße
MaggieMay

mmaatouk

status feld kann sein 1 oder 2 oder 3 oder 4 oder 5

aber wenn ich nur status wo 1 und 4 und 5 zb steht

das ist meine frage
mehrere filter an gleichem feld

MaggieMay

Ich hatte gehofft du würdest erklären, wozu du Semikolon-getrennte Wertelisten in die Textfelder eingibst.

Und was das betrifft:
Zitataber wenn ich nur status wo 1 und 4 und 5 zb steht
so kann der Status eines Datensatzes nur einen Wert haben, da ist die Verknüpfung mit OR schon ganz richtig.

Möglicherweise willst du aber auf etwas ganz anderes hinaus und die Eingabe aus den diversen Textfeldern zu einem Kriterium ergänzen, das könnte dann so aussehen:
Private Sub Text_Abgemeldet_AfterUpdate()
    flt_Status
End Sub

Private Sub Text_AKtiv_AfterUpdate()
    flt_Status
End Sub

Private Sub Text_Fällig_AfterUpdate()
    flt_Status
End Sub

Private Sub Text_Gesperrt_AfterUpdate()
    flt_Status
End Sub

Private Sub Text_Stillgelegt_AfterUpdate()
    flt_Status
End Sub

Private Sub flt_Status()
    Dim strKrit As String
    If Not IsNull(Me!Text_Abgemeldet) Then
        strKrit = strKrit & " OR [Status] = 1"
    End If
    If Not IsNull(Me!Text_AKtiv) Then
        strKrit = strKrit & " OR [Status] = 2"
    End If
    If Not IsNull(Me!Text_Fällig) Then
        strKrit = strKrit & " OR [Status] = 3"
    End If
    If Not IsNull(Me!Text_Gesperrt) Then
        strKrit = strKrit & " OR [Status] = 4"
    End If
    If Not IsNull(Me!Text_Stillgelegt) Then
        strKrit = strKrit & " OR [Status] = 5"
    End If
    If Len(strKrit) > 0 Then
        Me.Filter = mID(strKrit, 5)
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
End Sub


Anstelle der Textfelder könntest du dann aber wohl besser Checkboxen einsetzen.
Freundliche Grüße
MaggieMay

mmaatouk

wäre besser wenn steht status 1 und checkbox für die und so weiter bis 5 und checke was ich brauche
wie wäre das gegangen

MaggieMay

Zitatwäre besser wenn steht status 1 und checkbox [...]
Am besten wäre es wohl, wenn du dich in vollständigen und schlüssigen Sätzen ausdrücken könntest.

Sorry, dass ich das sagen muss, aber nach anfänglichem Rätselraten und Ins-Blaue-Hinein-Spekulieren wird es wohl langsam Zeit für Klartext, wenn du weiterführende Unterstützung benötigst.
Freundliche Grüße
MaggieMay

mmaatouk

Tut mir leid wenn ich nicht so gut erklären kann

aber Status ist ein Feld
541515433144141141111445444444442224414441542411144445454415544433544414554454411111144441114141111211151541221141144111444444441141434444414114411113331114114111441134114444411
hier zb die spalte von status
und darf die Benutzer filtern
und wählen 1 oder 2 oder 3 oder 4 oder 5
oder alle zusammen oder 1und 2 und 3
durch checkbox oder text eingeben

MaggieMay

Kann es sein, dass du eigentlich folgendes sagen wolltest:
ZitatIch möchte verschiedene Statuswerte in einem Statusfeld finden, welches aus einer Aneinanderreihung von Statuswerten von 1 bis 5 besteht, und zwar soll es alle ausgewählten "Stati" enthalten.
Vielleicht kannst du dann hiermit etwas anfangen:
Private Sub flt_Status()
    Dim strKrit As String
    If Not IsNull(Me!Text_Abgemeldet) Then
        strKrit = strKrit & " AND Instr([Status],'1') > 0"
    End If
    If Not IsNull(Me!Text_AKtiv) Then
        strKrit = strKrit & " AND Instr([Status],'2') > 0"
    End If
    If Not IsNull(Me!Text_Fällig) Then
        strKrit = strKrit & " AND Instr([Status],'3') > 0"
    End If
    If Not IsNull(Me!Text_Gesperrt) Then
        strKrit = strKrit & " AND Instr([Status],'4') > 0"
    End If
    If Not IsNull(Me!Text_Stillgelegt) Then
        strKrit = strKrit & " AND Instr([Status],'5') > 0"
    End If
    If Len(strKrit) > 0 Then
        Me.Filter = mID(strKrit, 6)
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
End Sub

Wenn das so zutrifft, würde ich die Textfelder unbedingt auf Checkboxen umstellen - und den Code natürlich entsprechend anpassen.
Freundliche Grüße
MaggieMay

mmaatouk

JA genau ist bei checkbox geklappt
aber wenn ich auschecken bleibt die wie es war

zb ich checke 1 und 2 und 3 dann klappt und zeigt mir die
aber wenn  zb 1 rauschecke bleibt 1 beim anzeigen


MaggieMay

Wie gesagt, der Code muss natürlich an den Einsatz von Checkboxen angepasst werden.  ::)

So sollte es klappen:
Private Sub flt_Status()
    Dim strKrit As String
    If NZ(Me!chk_Abgemeldet,0) = True Then
        strKrit = strKrit & " AND Instr([Status],'1') > 0"
    End If

' usw.

Beachte, dass ich auch den Namen des Steuerelements geändert habe, d.h. auch die AfterUpdate-Ereignisse sind neu zu schreiben.
Freundliche Grüße
MaggieMay

mmaatouk

vielen dank
brauche noch für die zweite frage eine Lösung
und zwar die Ergebnis von datum bereich
zb 2 text Feld und von erste Textfeld  bis  zweite Textfeld datum
und Verbindung zwischen die Status filter und die datum bereich filter

MaggieMay

Hi,

erweitere die Prozedur "flt_Status" - und gib ihr dann auch gleich einen sinnvolleren Namen - bspw. folgendermaßen:
    If Not IsNull(Me!txt_DatVon) AND Not IsNull(Me!txt_DatBis) Then
        strKrit = strKrit & " AND tabDatum Between " & Format(Me!txt_DatVon, "\#yyyy\/mm\/dd\#") & " AND " & Format(Me!txt_DatBis, "\#yyyy\/mm\/dd\#")
    End If

Was du tun willst, wenn nur ein Datum gefüllt ist, kannst du dir ja sicher noch selbst überlegen.
Freundliche Grüße
MaggieMay

mmaatouk

wie soll auch andere such textfelder mit verbinden
und noch die filter löschen button code noch brauche