Hallo ,
Ich habe in meinem Formular ein Listenfeld . Das Listenfeld(IstBauteilsuche) enthält folgende Spalte:(Feld:ID_Standort, Tabelle:Bauteile) und diese Spalte soll durch 3 Kontrollkästchen(Optionswerten: 1,2,3) gefiltert werden. Der VBA Code sieht folgender massen aus.
Private Sub Rahmen8_AfterUpdate()
Dim strFilter As String
If Rahmen8.Value = 1 Then
strFilter = "ID_StandOrt=1"
ElseIf Rahmen8.Value = 2 Then
strFilter = "ID_StandOrt=2"
Else
strFilter = vbNullString
End If
Me.Filter = strFilter
Me.FilterOn = True
End Sub
Im Fuß von Access sieht man die Datensätze die man im jeweiligen Tabelle, Formular usw. enthält. Wenn ich ein Kontrollkästchen benutzen filtert er die mir raus(sogar richtig), aber Visuel tut sich dort nichts...
Hi,
was passiert bei:
Private Sub Rahmen8_AfterUpdate()
Dim strFilter As String
Select Case Me.Rahmen8.Value
Case 1
strFilter = "ID_StandOrt=1"
Case 2
strFilter = "ID_StandOrt=2"
Case Else
strFilter = vbNullString
End Select
Me.Filter = strFilter
Me.FilterOn = True
End Sub
Ja wie gesagt , der Filter zeigt mir unten die richte Anzahl an Datensätze an. Woran es wirklich liegt ka .... Müsste ich dem Code noch explizip sagen , wo er filtern soll ?! In diesem Listenfeld zb.?
Das wäre das Anfänger-Projekt.
http://www.legion-der-finsternis.de/lager.mdb (http://www.legion-der-finsternis.de/lager.mdb)
Hallo,
willst Du das Formular filtern (was im Moment gemacht wird), das Listenfeld oder beides.
Das Listenfeld kann so nicht gefiltert werden, dem muss man eine neue Datenquelle (gefiltert) zuweisen.
Was soll bei der Auswahl von 3 passieren ?
Zitat von: MzKlMu am Dezember 09, 2015, 08:01:15
Hallo,
willst Du das Formular filtern (was im Moment gemacht wird), das Listenfeld oder beides.
Das Listenfeld kann so nicht gefiltert werden, dem muss man eine neue Datenquelle (gefiltert) zuweisen.
Was soll bei der Auswahl von 3 passieren ?
Hallo MzKlMu,
Am liebsten würde ich die 3 Kontrollkästchen mit einbauen in den eigentlichen filter. siehe(Lager, Art,Hersteller, Hersteller Nr.), aber das bekomme ich nicht hin. Da ich den SQL-Code so anpassen muss mit unzähligen anweisenungen mit verschiederen möglichkeiten ^^ Das übersteigt mein kleines Können bei weitem.... Ich war froh , das ich zwei zusätzliche Filter hinzugefügt bekommen habe. :P
Das Listenfeld sollte gefiltert gefiltert werden. Und wenn man auf 3 klickt, sollten alle Datensätze angezeigt werden. Ich habe es auch schon ein Beispiel erstellt , da klappt alles wunderbar. Nur wenn ich es übertrage , geht nichts. ^^ http://www.legion-der-finsternis.de/Beispiel.accdb (http://www.legion-der-finsternis.de/Beispiel.accdb)
Hallo,
was ist denn nun hier Sache?
Das Beispiel funktioniert doch. Oder ist das Beispiel gar nicht die betroffene DB?
Lad mal die "Problem"-DB hier hoch (komprimiert/repariert und gezippt) und beschreib anhand der Tabellen- und Feld-Namen, was genau und konkret passieren soll.
http://www.legion-der-finsternis.de/Lager.mdb
Das ist die eigentliche DB.
Ich habe in dieser DB schon 4 eingebaute Filter(Lager/Pfeiler, Art,Hersteller, Hersteller Nr.1). Die Kontrollhäckchen (Lack Ost, Lack West, Alle) sollen hinzugefügt werden als Filter zu den anderen bestehenden Filtern. Gefiltert wird das im Listenfeld(IstBauteilsuche) die Spalte mit dem Feld(ID_StandOrt)--> Tabelle(Bauteile). Wenn das jeweilige Häckchen gesetzt wurde, sollten die jeweiligen Datensätze mit dem jeweiligen Optionswert rausgefiltert werden und angezeigt bekommen.
Das was ich im Beispiel [(siehe oben) http://www.legion-der-finsternis.de/Beispiel.accdb] gemacht habe , so sollte es laufen. Nur ich bekomme es nicht umgesetzt in die eigentliche DB.(Lager.mdb)
Hallo,
wirf die unsäglichen Formularfeld-Verweise aus der Listenfeldabfrage heraus. Setze den SQL-String mit den entspr. Kriterien per VBA zusammen und weise den String der Eigenschaft "Rowsource" des Listenfeldes zu:
Sub frm_Requery()
Dim strSQL As String, strKrit As String
strSQL = "SELECT Bauteile.ID_Bauteil, StandOrt.StandOrt, Lager.Lager, Art.Art, Hersteller.Hersteller, Bauteile.Hersteller_Nr_1, Bauteile.Symbol_Nummer, Bauteile.Hersteller_Nr_2, Bauteile.Beschreibung, Bauteile.ID_Hersteller_F2, Bauteile.ID_Lager_F, Bauteile.ID_Hersteller_F, Bauteile.ID_Art_F, Bauteile.Schrank, Bauteile.Fach, Bauteile.Ebene, Bauteile.Reihe, Lager.Pfeiler, Lager.LagerOrtBeschreibung, Bauteile.ID_StandOrt " & _
" FROM Lager INNER JOIN (Art INNER JOIN (StandOrt INNER JOIN (Hersteller INNER JOIN Bauteile ON Hersteller.ID_Hersteller = Bauteile.ID_Hersteller_F) ON (StandOrt.ID = Bauteile.[ID_StandOrt]) AND (StandOrt.ID = Bauteile.[ID_StandOrt])) ON Art.ID_Art = Bauteile.ID_Art_F) ON Lager.ID_Lager = Bauteile.ID_Lager_F "
Select Case Me!Rahmen8
Case 1
If Not IsNull(Me!cboLager) Then strKrit = strKrit & " and ID_Lager_F = " & Me!cboLager
If Not IsNull(Me!cboHersteller) Then strKrit = strKrit & " and ID_Hersteller_F = " & Me!cboHersteller
If Not IsNull(Me!cboArt) Then strKrit = strKrit & " and ID_Art_F = " & Me!cboArt
strKrit = strKrit & " and ID_StandOrt=1"
Case 2
If Not IsNull(Me!cboLager) Then strKrit = strKrit & " and ID_Lager_F = " & Me!cboLager
If Not IsNull(Me!cboHersteller) Then strKrit = strKrit & " and ID_Hersteller_F = " & Me!cboHersteller
If Not IsNull(Me!cboArt) Then strKrit = strKrit & " and ID_Art_F = " & Me!cboArt
strKrit = strKrit & " and ID_StandOrt=2"
Case 3
If Not IsNull(Me!cboLager) Then strKrit = strKrit & " and ID_Lager_F = " & Me!cboLager
If Not IsNull(Me!cboHersteller) Then strKrit = strKrit & " and ID_Hersteller_F = " & Me!cboHersteller
If Not IsNull(Me!cboArt) Then strKrit = strKrit & " and ID_Art_F = " & Me!cboArt
Case Else
strKrit = ""
End Select
If Len(strKrit) Then strKrit = " where " & Mid(strKrit, 6)
Me!lstBauteilsuche.RowSource = strSQL & strKrit
If Me.lstBauteilsuche.ListCount = 0 Then
MsgBox "Suchwerte nicht gefunden, der Filter wird zurückgesetzt."
btnFilterLoeschen_Click
Else
Me.Requery
End If
End Sub
btw: Vielleicht solltest Du auch über abhängige Kombifelder nachdenken . Zudem sollte in jedem Modulkopf Option Explicit zu stehen kommen.
Erstmal ein dickes Dankeschön , das du dich damit beschäftigst hast. Deinen Code habe ich eingefügt im VBA-Modul (Form_frmErfassung). Habe auch in jedem VBA-Modul , Option Explicit hinzufügt. Hoffe das war/ist so richtig.
Zitatabhängige Kombifelder
damit werde ich mich 100% beschäftigen , danke für den weiteren Tipp.
Option Compare Database
Option Explicit
Private Sub Form_Open(Cancel As Integer)
DoCmd.Maximize
End Sub
Private Sub Form_Current()
Me.lstBauteilsuche = Me.ID_Bauteil
End Sub
Private Sub lstBauteilsuche_AfterUpdate()
Me.Recordset.FindFirst "[ID_Bauteil] = " & Me.lstBauteilsuche
End Sub
Private Sub btnFilterLoeschen_Click()
Me.cboLager = Null
Me.cboHersteller = Null
Me.cboArt = Null
Me.txtTypNummer = Null
Me.Requery
Me.lstBauteilsuche.Requery
End Sub
Sub frm_Requery()
Dim strSQL As String, strKrit As String
strSQL = "SELECT Bauteile.ID_Bauteil, StandOrt.StandOrt, Lager.Lager, Art.Art, Hersteller.Hersteller, Bauteile.Hersteller_Nr_1, Bauteile.Symbol_Nummer, Bauteile.Hersteller_Nr_2, Bauteile.Beschreibung, Bauteile.ID_Hersteller_F2, Bauteile.ID_Lager_F, Bauteile.ID_Hersteller_F, Bauteile.ID_Art_F, Bauteile.Schrank, Bauteile.Fach, Bauteile.Ebene, Bauteile.Reihe, Lager.Pfeiler, Lager.LagerOrtBeschreibung, Bauteile.ID_StandOrt " & _
" FROM Lager INNER JOIN (Art INNER JOIN (StandOrt INNER JOIN (Hersteller INNER JOIN Bauteile ON Hersteller.ID_Hersteller = Bauteile.ID_Hersteller_F) ON (StandOrt.ID = Bauteile.[ID_StandOrt]) AND (StandOrt.ID = Bauteile.[ID_StandOrt])) ON Art.ID_Art = Bauteile.ID_Art_F) ON Lager.ID_Lager = Bauteile.ID_Lager_F "
Select Case Me!Rahmen8
Case 1
If Not IsNull(Me!cboLager) Then strKrit = strKrit & " and ID_Lager_F = " & Me!cboLager
If Not IsNull(Me!cboHersteller) Then strKrit = strKrit & " and ID_Hersteller_F = " & Me!cboHersteller
If Not IsNull(Me!cboArt) Then strKrit = strKrit & " and ID_Art_F = " & Me!cboArt
strKrit = strKrit & " and ID_StandOrt=1"
Case 2
If Not IsNull(Me!cboLager) Then strKrit = strKrit & " and ID_Lager_F = " & Me!cboLager
If Not IsNull(Me!cboHersteller) Then strKrit = strKrit & " and ID_Hersteller_F = " & Me!cboHersteller
If Not IsNull(Me!cboArt) Then strKrit = strKrit & " and ID_Art_F = " & Me!cboArt
strKrit = strKrit & " and ID_StandOrt=2"
Case 3
If Not IsNull(Me!cboLager) Then strKrit = strKrit & " and ID_Lager_F = " & Me!cboLager
If Not IsNull(Me!cboHersteller) Then strKrit = strKrit & " and ID_Hersteller_F = " & Me!cboHersteller
If Not IsNull(Me!cboArt) Then strKrit = strKrit & " and ID_Art_F = " & Me!cboArt
Case Else
strKrit = ""
End Select
If Len(strKrit) Then strKrit = " where " & Mid(strKrit, 6)
Me!lstBauteilsuche.RowSource = strSQL & strKrit
If Me.lstBauteilsuche.ListCount = 0 Then
MsgBox "Suchwerte nicht gefunden, der Filter wird zurückgesetzt."
btnFilterLoeschen_Click
Else
Me.Requery
End If
End SubZitatHallo,
wirf die unsäglichen Formularfeld-Verweise aus der Listenfeldabfrage heraus. Setze den SQL-String mit den entspr. Kriterien per VBA zusammen und weise den String der Eigenschaft "Rowsource" des Listenfeldes zu:
Alles was dort steht , habe ich null verstanden. :-[
Hallo,
ZitatAlles was dort steht , habe ich null verstanden.
Was genau hast Du nicht verstanden? Den Code oder den Hinweis auf die Formular-Steuerelement-Referenzen?
1.wirf die unsäglichen Formularfeld-Verweise aus der Listenfeldabfrage.
2.Setze den SQL-String mit den entspr. Kriterien per VBA zusammen
3. weise den String der Eigenschaft "Rowsource" des Listenfeldes zu
Diese 3 Anweisungen die du mir gegeben hast, habe ich nicht verstanden. Hoffe aber das ich den VBA-Code richtig eingesetzt habe?!
Hallo,
ich denke, Du verstehst den Code nicht. Darin habe ich die 3 Punkte umgesetzt.....
1.: In der Listenfeld-Abfrage hast Du als Kriterien (und dazu in komplexer Weise) Formular-Steuerelement-Namen eingesetzt. Das ist unflexibel, fehlerträchtig stößt schnell an Grenzen.
2.:Das habe ich mit den entspr. Codezeilen ungesetzt.
3.: dito: Me!lstBauteilsuche.RowSource = strSQL & strKrit
Ein bisschen VBA-Kenntnisse und ein paar Access-Grundlagen (Tabellen, Abfragen, SQL-String, etc.) sind schon Voraussetzung für die erfolgreiche Entwicklung einer DB...
Da hast du recht den Code habe ich nicht verstanden
Neuste Vision: http://www.legion-der-finsternis.de/Lager.mdb]
1. Me!lstBauteilsuche.RowSource = strSQL & strKrit im VBA ode hinzugefügt
2. Im Listenfeld-Abfrage die ganzen Kriterien gelöscht.
3. deinen VBA-Code eingesetzt.
Trotzallem klappt nichts.
Hallo,
anbei (unvollständiges) Beispiel
Danke dir.
Werde mich damit befassen und versuchen es hinzubekommen um das Textfeld-"txtTypNummer" einbinden zukönnen, das fehlt ja im VBA-Code noch . Und den Filter zurücksetzten, klappt auch nicht so , wie es soll.
Werde mich melden ob es geklappt hat oder weniger.
mfg Shayol danke nochmal
Habe es hinbekommen, danke für die Hilfe!
mfg Shayol