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
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.
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] & "*"));
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.
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
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 SubAnstelle der Textfelder könntest du dann aber wohl besser Checkboxen einsetzen.
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
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.
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
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 SubWenn das so zutrifft, würde ich die Textfelder unbedingt auf Checkboxen umstellen - und den Code natürlich entsprechend anpassen.
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
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.
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
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.
wie soll auch andere such textfelder mit verbinden
und noch die filter löschen button code noch brauche
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.
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
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
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
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 "".
die die frage ist wie ich die suche text felder in code einsetzen kann und mit der checkboxen verbindet seinbeim filtern
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.
danke Ihnen
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?
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
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.