Neuigkeiten:

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

Mobiles Hauptmenü

Abfrage über mehrere Kombinationsfelder einer Tabelle wie in Excel

Begonnen von Ronny2007, September 29, 2011, 13:26:21

⏪ vorheriges - nächstes ⏩

Ronny2007

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ß

DF6GL

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.

Ronny2007

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.

Jonny

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

Ronny2007

#4
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


DF6GL

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

Ronny2007

Hallo Franz,

muss ich den String dann hinter die einzelnen Kombinationsfelder legen?

Jonny

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

Ronny2007

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

Jonny

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

DF6GL

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.



Ronny2007

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


DF6GL

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....

Ronny2007

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

Jonny

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