Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: mmaatouk am April 09, 2015, 13:25:19

Titel: filtern
Beitrag von: mmaatouk am April 09, 2015, 13:25:19
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
Titel: Re: filtern
Beitrag von: MaggieMay am April 09, 2015, 13:34:59
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.
Titel: Re: filtern
Beitrag von: mmaatouk am April 09, 2015, 13:37:45
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] & "*"));
Titel: Re: filtern
Beitrag von: MaggieMay am April 09, 2015, 14:21:08
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.
Titel: Re: filtern
Beitrag von: mmaatouk am April 09, 2015, 14:28:22
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
Titel: Re: filtern
Beitrag von: MaggieMay am April 09, 2015, 14:44:00
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.
Titel: Re: filtern
Beitrag von: mmaatouk am April 09, 2015, 22:30:47
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
Titel: Re: filtern
Beitrag von: MaggieMay am April 10, 2015, 00:00:03
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.
Titel: Re: filtern
Beitrag von: mmaatouk am April 10, 2015, 10:04:44
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
Titel: Re: filtern
Beitrag von: MaggieMay am April 10, 2015, 12:55:44
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.
Titel: Re: filtern
Beitrag von: mmaatouk am April 10, 2015, 13:30:40
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

Titel: Re: filtern
Beitrag von: MaggieMay am April 10, 2015, 14:08:57
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.
Titel: Re: filtern
Beitrag von: mmaatouk am April 10, 2015, 14:19:15
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
Titel: Re: filtern
Beitrag von: MaggieMay am April 10, 2015, 14:28:59
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.
Titel: Re: filtern
Beitrag von: mmaatouk am April 10, 2015, 14:50:22
wie soll auch andere such textfelder mit verbinden
und noch die filter löschen button code noch brauche
Titel: Re: filtern
Beitrag von: MaggieMay am April 10, 2015, 15:22:47
Zitat von: mmaatouk am April 10, 2015, 14:50:22wie soll auch andere such textfelder mit verbinden
Was genau meinst du damit?
Zitatund noch die filter löschen button code noch brauche
Du hattest doch bereits eine Löschfunktion in deinem Code, wo ist das Problem?
Natürlich musst du auch dort die geänderten Steuerelementnamen berücksichtigen.
Titel: Re: filtern
Beitrag von: mmaatouk am April 11, 2015, 13:22:17
ich habe auch such text felder für die andere spalte auch eingefügt zb . ART , Nachname , Vorname usw...
und brauche ein code für button damit ich alle filtern löschen kann
Titel: Re: filtern
Beitrag von: MaggieMay am April 11, 2015, 23:05:00
Hi,
Zitat von: mmaatouk am April 11, 2015, 13:22:17und brauche ein code für button damit ich alle filtern löschen kann
den Filter kannst du folgendermaßen entfernen:
Private Sub cmdFilterEntfernen_Click()
    Me.Filter = ""
    Me.FilterOn = False
End Sub
Titel: Re: filtern
Beitrag von: mmaatouk am April 12, 2015, 12:47:53
ich habe auch such Textfelder für die andere spalte auch eingefügt z.b. ART , Nachname , Vorname usw...
soll der Benutzer was eingeben dann mit die check-boxen gefiltert werden

zum beispiel : ich gebe ein Vorname ein und check Status 1 wird gegeben die Geräte die Status 1 haben und zu diese Vorname gehört
Titel: Re: filtern
Beitrag von: MaggieMay am April 12, 2015, 13:19:03
Zitat von: MaggieMay am April 10, 2015, 15:22:47Du hattest doch bereits eine Löschfunktion in deinem Code, wo ist das Problem?
Ich verstehe echt nicht worauf du hinaus willst. Wie du die Textfelder zur Sucheingabe löschen kannst, weißt du doch. Am besten, du setzt die Felder alle auf NULL und nicht auf "".
Titel: Re: filtern
Beitrag von: mmaatouk am April 12, 2015, 16:54:38
die die frage ist wie ich die suche text felder in code einsetzen kann und mit der checkboxen verbindet seinbeim filtern
Titel: Re: filtern
Beitrag von: MaggieMay am April 12, 2015, 22:34:31
Ich verstehe dich nicht und habe auch keine Lust mehr auf Rätselraten, aber schau dir mal die Beispiel-Lösung "1. Suchformular in 10 Min. ... (http://www.office-loesung.de/ftopic13271_0_0_asc.php)" im Forum "Office-Loesung" an, möglicherweise kommt das dem was du suchst ziemlich nahe.

Titel: Re: filtern
Beitrag von: mmaatouk am April 14, 2015, 16:33:23
danke Ihnen
Titel: Re: filtern
Beitrag von: MaggieMay am April 14, 2015, 16:41:56
Hi,
Zitat von: mmaatouk am April 12, 2015, 16:54:38die die frage ist wie ich die suche text felder in code einsetzen kann und mit der checkboxen verbindet seinbeim filtern
ich habe nochmal drüber nachgedacht, was du meinen könntest. Es ist doch so, dass du zum einen bereits über die Abfrage filterst und zum anderen im Formular noch einen Filter setzt. Diese Kombination müsste doch funktionieren, da musst du doch die anderen Suchfelder nicht auch noch per Vba in den Filter einbauen.

Oder was genau ist das Problem?
Titel: Re: filtern
Beitrag von: mmaatouk am April 17, 2015, 11:07:30
in gleichem Formular ich habe check boxen  und Textfelder für filtern
ich habe die check boxen schon erledigt durch deinen Hilfe
ich meine wie geht die filtern zwischen beide (check boxen und Textfelder )
oder wie kann ich beide gleichzeitig benutzen zum filtern
Titel: Re: filtern
Beitrag von: MaggieMay am April 17, 2015, 11:18:17
Heißt das, du willst nicht mehr in der Abfrage filtern, sondern nur noch im Formular selbst, also per VBA-Code?

Andernfalls musst du das Formular zuerst mit Me.Requery aktualisieren, wenn du Änderungen in den Textfeldern gemacht hast, und anschließend per VBA filtern.

PS:
Hast du dir denn inzwischen mal die Beispiellösung zum Suchformular angeschaut? Das müsste doch eigentlich genau das sein was du suchst.