Hallo zusammen,
arbiete zwar schon länger in Access, bin aber wieder an meine grenzen gestoßen. Deshalb hier der Hilferuf.
Ich möchte auf ein Formular mit 3 Kombinationsfelder arbeiten hinter denen die gleiche Tabelle liegt. Und zwar möchte ich dort über
Auswahl der Daten einen Filter setzen denn ich später anwende. Die Kombinatisonfelder sollen alle abhängig voneinander sein wie die Filterfunktion in Exel, sodas es egal ist in welchem Kombinationsfeld ich mit den setzen meines Filters (Auswahl der dahinterliegenden Daten)beginne.
Um Unterstützung wäre ich dankbar.
Gruß
Hallo,
"Die Kombinatisonfelder sollen alle abhängig voneinander sein " ist in Access eine andere Methodik.
Wenn ich recht verstehe, willst Du erst in den Kombifeldern je irgendeinen Wert (Datensätze) UNabhängig voneinander auswählen, nach denen anschließend gefiltert werden soll. Das Filtern erledigst Du am Besten mit einer zusätzlichen Schaltfläche, die das erst nach der vollständigen Auswahl durchführt.
Ja die Schaltfläche besteht schon. Brauche aber halt immer noch die Filterfunktion bei denen alle 3 Kombinationsfelder ABhängig voneinander sind wie die Filterfunktion in excel.
Hallo,
da mußt du mit me.filter und me.filteron arbeiten.
Den String für den Filter mußt du mit mehrer If und mit & zusammensetzen. Das wird ein wenig fummelei aber
klappt dann ganz gut.
If not isnull(Auswahlkombi1) and isnull(Auswahlkombi2) and isnull(auswahlkombi3) then
me.filter = "Feldname = " & Auswahlkombi1
end if
If not isnull(Auswahlkombi1) and not isnull(Auswahlkombi2) and isnull(auswahlkombi3) then
me.filter = "Feldname = " & Auswahlkombi1 & " and Feldname = " & Auswahlkombi2
end if
usw.
Bitte beachte das Textwerte in ' stehen müssen.
Gruß
Johann
Hallo Jonny, erstmal danke für deine Unterstützung. Aber vielleicht kannst du mir nochmal helfen.
Wo hinterlege ich den String und bei mir würde der String so aussehen:
If Not IsNull(BLsuchen) And IsNull(SKsuchen) And IsNull(GEsuchen) Then
Me.Filter = "Bl = " & BLsuchen
End If
If Not IsNull(BLsuchen) And Not IsNull(SKsuchen) And IsNull(GEsuchen) Then
Me.Filter = "BL = " & BLsuchen & " and STRK_NAME = " & SKsuchen
End If
If Not IsNull(BLsuchen) And Not IsNull(SKsuchen) And IsNull(GEsuchen) Then
Me.Filter = "BL = " & BLsuchen & " and STRK_NAME = " & SKsuchen & " and GE_NAME = " & GEsuchen
Die Tabelle für die 3 Kombinationsfelder sieht so aus z.B. :
Bl STRK_NAME GE_NAME
0018 Bludenz West Stuttgart
4508 Bludenz West München
4509 Rheinau Ost Mannheim
Und jede Spalte stellt ein Kombinationsfeld dar in meinem Formular.
Hinter dem Formular liegt keine Tabelle. Nach Auswahl setze ich den Filter mit einem Button auf ein Unterformular.
Gruß
Jonny
Hallo,
Sub btnDeinButton_Click()
Dim strkrit as String
If not isnull(Me!BlSuchen) Then strkrit =strkrit & " and Bl ='" & Me!BiSuchen & "'"
If not isnull(Me!SKSuchen) Then strkrit =strkrit & " and STRK_Name ='" & Me!SKSuchen & "'"
If not isnull(Me!GESuchen) Then strkrit =strkrit & " and GE_Name='" & Me!GESuchen & "'"
If Len(strkrit) >0 then strkrit = mid(strkrit,6)
Me!DeinUFOName.Form.Filter = strkrit
Me!DeinUFOName.Form.FilterOn=true
End Sub
Hallo Franz,
muss ich den String dann hinter die einzelnen Kombinationsfelder legen?
Hallo,
du hast ja eine Schaltfläche Filtern.
Da kannst du den Code beim Klicken hinterlegen.
Wenn du den Code hinter jeden Kombi (bei aktuallisieren) legst wird immer sofort gefiltert.
Das kann auch gewünscht werden. Dann brauchst du aber diei Schaltfläche nicht mehr.
Gruß
Johann
Wie würde den dann der String aussehen wenn ich Ihn hinter meine Kombinationsfelder lege, sodas ich erst die Werte in den Komnbinationsfeldern auswähle und dann mit den bestehenden Button die werte in das Unterformular setze.
Und leider muss ich dich auch fragen was heist den "bei aktualisieren" welches Erreignis ist das den genau?
Gruß
Ronny
Hallo,
Sorry habe mich verschrieben sollte heisen "nach Aktualisierung" statt "bei aktuallisieren".
Der String sieht immer gleich aus. Er prüft welches Kombifeld einen Wert hat und kombiniert die Werte aus den
drei Kombi´s.
Jetzt kannst du dich entscheiden:
1. Mit Schaltfläche filtern dann müssen zuerst die Selektionsbegriffe ausgewählt werden und danach wird gefilter.
2. Immer wenn bei irgendein Kombifeld etwas ausgewählt wird, wird direkt gefiltert.
Wenn du das willtst muß der Code bei jeden Kombifeld hinterlegt werden siehe oben.
Gruß
Johann
Hallo,
"muss ich den String dann hinter die einzelnen Kombinationsfelder legen? "
welchen "String"?
Wenn Du den Code meinst, dann ist das schon die Ereignisprozedur für das Ereignis "Beim Klicken" des Such-Buttons. Hinter die einzelnen Kombis wird nichts gelegt, solange allein die Auswahl in einem Kombi keine Aktion zur Folge haben muss. Erst wenn auf den Button ("btnDeinButton") geklickt wird, wird das Unterformular (den Namen noch anpassen!!) gefiltert.
Hallo Johann, Hallo Franz
ich würde laut Johann die Aktion 1 bei mir durchführen. Egal bei welchem Kombinationsfeld ich anfange zu filtern, so sollten ich bei dem nächsten Feld (egal welches von den Zwei anderen) die gefilterten Daten sehen und wenn dann noch gewollt auch bei dem letzten Kombifelder die nochmal gefilterten Werte auswählen können und danach mit einem Button (Filterfunktion besteht schon) den ausgewählten Filter in dem Unterformular anzeigen zu lassen.
Zur Info, das Unterformular einfach als Datenblatt darstellen wo die Filterfunktion ja besteht, gefällt meinem Chef nicht. Deshalb dieser Weg.
Gruß
Wolfgang
Hallo Wolfgang,
Deinen (oder den Deines Chefs) "Filtervorgang" versteh ich nicht recht...
-- entweder gibt es eine Filterung mit dem 3 UNABHÄNGIGEN Kombis , dann kannst Du die gepostete Ereignisprozedur (Klick auf den Button) verwenden. Eine Reihenfolge bei der Kombifeld-Bedienung (Auswahl) besteht hier nicht. Ob eine gegenseitige Filterung der in den Kombilisten angezeigten Datensätze sinnvoll ist, glaube ich nicht.
-- oder es soll eine Filterung mittels ABHÄNGIGER Kombifelder passieren, dann muss die Reihenfolge vom "gröbsten" bis zum "feinsten" Kombi eingehalten werden, und die Datensatzherkunft (SQL-String, Abfrage) des nächstfolgenden Kombis mit dem im vorangehenden Kombis ausgewählten Wert als Kriterium neu gesetzt werden (Beim Ereignis "Nach Aktualisierung" der Kombis)
http://www.donkarl.com/?FAQ4.36
PS: Access ist KEIN Excel....
Hallo Franz,
es soll ja eine Filterung mittels abhängiger Kombifelder passieren, blos solle es keine festgelegte Reihenfolge vom "gröbsten" bis zum "feinsten" geben, sondern die drei Kombinfelder sollten Filterbar sein wie der Autofilter in Excel, egal bei welchem Kombifeld ich beginne oder welches ich dann auswähle, es sollen immer beim öffnen des Kombifeld der gefilterte Wert angezeigt werden. Ich weis halt nicht ob diese Funktion in Access möglich ist. erstmal danke bis dahin für deine Unterstützung.
Gruß
Ronny
Hallo Ronny,
natürlich geht das in Acc.
hast du denn die Vorschläge mal probiert und wenn ja wo ist das Problem?
Gruß
Johann
Hallo,
"blos solle es keine festgelegte Reihenfolge vom "gröbsten" bis zum "feinsten" geben"
dann setze halt die Recordsource (Datensatzherkunft) jeweils der beiden anderen Kombis auf den SQL-String mit dem ausgewählten Wert des akt. Kombis als Kriterium. Jeweils im "Nach Aktualisieren" Ereignis aller Kombis.
Hallo zusammen,
war leider 2 wochen unterwegs und konnte deshalb auf die eingestellten Antworten nicht reagieren.
Habe aber eure Vorschläge bei mir angewendet, aber leider kein Ergebnis erzielt. Deshalb nochmals die Bitte, Johann und Franz, um Untertsützung. Im Thread sind ja die Angaben der Tabelle und Kombi-felder hinterlegt. Desweiteren habe ich jetzt zwei Screenshots des Formular und des Codes angefügt.
Gruß
Ronny
[Anhang gelöscht durch Administrator]
Hallo,
bei den betroffenen Tabellenfeldern handelt es sich offensichtlich um den Datentyp Text, so dass im Filterkriterium der Vergleichswert in Hochkommata einzuschliessen ist:
Me.Filter = "BL = '" & Me!blSuchen & "' and ..... " ' Me nicht vergessen.
Me.FilterOn = true ' nicht vergessen
erstmal danke Franz,
könnte schon fast heulen ;) aber klappt immer noch nicht. Habe den Code umgeschrieben. Als Datei mal beigefügt.
Muss ich vielleicht die Tabelle dem Formular hinterlegen (Datensatzherkunft)?
Als datensatzherkunft für die Kombinationsfelder ist ja nur eine Spalte aus der Tabelle hinterlegt.
Na vielleicht siehst du ja einen Fehler in meinem Code.
Gruß
Ronny
[Anhang gelöscht durch Administrator]
Hallo,
lies mein Posting GENAU...
"so dass im Filterkriterium der Vergleichswert in Hochkommata einzuschliessen ist:"
sowie:
"Me" hast Du immer noch nicht benutzt....
Hallo Leute habe es jetzt hinbekommen.
Danke für die Hilfe an alle :)
Gruß
Ronny