collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 38
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13570
  • stats Beiträge insgesamt: 60074
  • stats Themen insgesamt: 8221
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Listenfelder als Filter mit Mehrfachauswahl  (Gelesen 150 mal)

Offline hansdampf8

  • Newbie
  • Beiträge: 5
Listenfelder als Filter mit Mehrfachauswahl
« am: Juni 14, 2017, 23:32:05 »
Hallo Access-o-Mania Gemeinde!!
Ich bin während meiner Internetrecherche für mein Problem auf euer Forum gestoßen und habe mich registriert.
Nun muss ich gleich sprichwörtlich mit der Tür ins Haus fallen.
Ich versuche als Access-Neuling mein Problem bestmöglich zu schildern.

Ich habe 5 Tabellen(tbl_Branchen,tbl_Branchenverzeichnis,tbl_Firmen,tbl_Mitarbeiter u. tbl_Position).
Meine bisherigen Abfragen und Formulare für die Eingabe der Daten sind für mein Verständnis ok und funktionieren.
Probleme macht mein frm_HauptFilter. In der dazugehörigen qryAbfrage frage ich die  benötigten Daten aus den 5 Tabellen ab.
Im frm_Hauptfilter sind 3 Listenfelder, im ersten Listenfeld werden die Branchen der eingetragenen Firmen dargestellt.
Im 2. Listenfeld soll anhand der Mehrfachauswahl der Branchen, die Mitarbeiterposition angezeigt werden die die jeweiligen Firmen der gewählten Branchen haben. Um dann hier zu guter Letzt die Ausgabe im 3. Listenfeld über die Auswahl der Mitarbeiterposition des 2. Feldes zu gewährleisten.

Meine DB soll am Ende der Entwicklung über das frm_HauptFilter eine schnelle Filterung über Branchen zu Mitarbeiter-Positionen die übrig gebliebenen Mitarbeiter und deren Email im 3. Listenfeld anzeigen.

Vielleicht noch ein kl. Beispiel:
Auswahl
Branche ->Angeln, Kultur
Position ->Inhaber(der Firma XY mit Branche Angeln) und Buchhaltung( der Firma XY mit Branche Kultur)
Mitarbeiter ->Klaus Dieter Plötz(Inhaber der Firma XY mit Branche Angeln)

Ich hoffe das ich mich halbwegs verständlich Ausdrücken konnte!
Freue mich auf euer Feedback... LG
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1347
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #1 am: Juni 15, 2017, 00:37:13 »
Hallo Hans,
Zitat
Probleme macht mein frm_HauptFilter. In der dazugehörigen qryAbfrage frage ich die  benötigten Daten aus den 5 Tabellen ab.
Wenn es auf dem Form nur die drei Listen befinden ist das IMO unnötig.
Die prinzipielle Arbeitsweise mit abhängigen Kombi-/Listencontrols kannst
du hier nachlesen: http://www.donkarl.com?FAQ4.36
Bei Listen mit Mehrfachauswahl muss man allerdings etwas "tricksen".
Dabei musst du mit einer Schleife durch die Auflistung "ItemsSelected" der
Basisliste einen (Komma getrennten) String mit den IDs zusammensetzen.
Dieser wird dann in der WHERE-Klausel der DS-Herkunft der abhängigen
Liste eingesetzt.
Liste.RowSource = "SELECT ... WHERE FKFeld IN (" & DerString & ") ...Du kannst aber gerne auch eine Beispiel-DB mit ein paar Spieldaten hier
reinstellen.
Für andere Helfer bitte als .mdb.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 
Folgende Mitglieder bedankten sich: hansdampf8

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 22797
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #2 am: Juni 15, 2017, 15:21:31 »
Hallo,

wobei mir das "Branchenverzeichnis"   nicht klar werden will.



Soll das eine Einteilung/Zuordnung einer(!) Firma zu mehreren(!) Branchen (wobei hier auch die Beispielwerte irgendwie nicht "zusammenpassen")  sein?


Oder ist eher gemeint, dass eine Firma zu einer bestimmten Branche gehört?

Offline hansdampf8

  • Newbie
  • Beiträge: 5
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #3 am: Juni 15, 2017, 15:49:09 »
Hallo zusammen!

Leider blicke ich jetzt gar nicht mehr durch und bin echt ratlos. Ich begreife es mit dieser Mehrfachauswahl einfach nicht. Meine VBA Kenntnisse sind hier einfach zu schlecht. Ich wäre über weitere Hilfestellungen sehr dankbar.

Das Branchenverzeichnis ist eine Hilfstabelle für die n:m Zuordnung der Firmen und Branchen. (so hab ich das jedenfalls verstanden)
Mein Ziel ist es, im erst Listenfeld die Branchen zu wählen und die passende Ausgabe der Mitarbeiterpositionen im zweiten Listenfeld anzeigen zu lassen. Hier sollen die Positionen gewählt werden und im dritten Listenfeld sollen dann die gefilterten Mitarbeiter samt Email stehen.
Ich hab jetzt schon so viel probiert mit für mich unverständlichem VBA Code, dass ich nicht mehr durchblicke.

Anbei packe ich die .mdb gefüllt mit ein paar Daten, vielleicht hilt das mehr als meine Erklärungsversuche

Danke
 

Offline Lachtaube

  • Access-Profi
  • **
  • Beiträge: 461
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #4 am: Juni 15, 2017, 17:10:08 »
Du könntest einen Knopf zwischen die beiden Listenfelder positionieren, der aus der Auswahl die entsprechende Bedingung für lst_Position erstellt.' Knopf im Formular frm_Hauptfilter
Private Sub ctlZeigePositionen_Click()
   Dim v, i As Long, branchen() As String, condition As String
   
   Const SQL As String = _
         "SELECT IDPosition, txtPosition FROM tbl_Position WHERE "

   With Me.lst_Branchen
      If .ItemsSelected.Count > 0 Then ReDim branchen(.ItemsSelected.Count - 1)
      For Each v In .ItemsSelected
         branchen(i) = v
         i = i + 1
      Next
   End With

   If i = 0 Then
      condition = "False"
   Else
      condition = "IDPosition IN(" & Join(branchen, ",") & ")"
   End If
   
   Me.lst_Position.RowSource = SQL & condition
End Sub
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: hansdampf8

Offline hansdampf8

  • Newbie
  • Beiträge: 5
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #5 am: Juni 15, 2017, 20:56:02 »
Du könntest einen Knopf zwischen die beiden Listenfelder positionieren, der aus der Auswahl die entsprechende Bedingung für lst_Position erstellt.' Knopf im Formular frm_Hauptfilter
Private Sub ctlZeigePositionen_Click()
   Dim v, i As Long, branchen() As String, condition As String
   
   Const SQL As String = _
         "SELECT IDPosition, txtPosition FROM tbl_Position WHERE "

   With Me.lst_Branchen
      If .ItemsSelected.Count > 0 Then ReDim branchen(.ItemsSelected.Count - 1)
      For Each v In .ItemsSelected
         branchen(i) = v
         i = i + 1
      Next
   End With

   If i = 0 Then
      condition = "False"
   Else
      condition = "IDPosition IN(" & Join(branchen, ",") & ")"
   End If
   
   Me.lst_Position.RowSource = SQL & condition
End Sub

Großen Dank für deine Mühen!
Leider verstehe ich nicht wirklich diesen Quellcode und habe in Bezug VBA noch viel Arbeit vor mir.
Bei der Filterung bzw. beim auslesen der Positionen gibt es Probleme. Es wird nur pro gewählte Branche eine Position angezeigt und für die erste Branche gar nichts.
Beispiel: gewählte Branche Angeln entspricht hier 3 Firmen mit insgesamt 8 Mitarbeitern -> 1xGeschäftsführer 1xGeschäftsführerin 2xMarketing 2x Buchhaltung 1xVorsitzender und eine Marketing/Buchhaltung
bei Auswahl wird leider nur ein einziger Eintrag bzw. Position angezeigt.


« Letzte Änderung: Juni 15, 2017, 21:06:36 von hansdampf8 »
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 22797
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #6 am: Juni 16, 2017, 10:35:28 »
Hallo,

anbei mal ein Beispiel.  Ob die Filterung nun den Erwartungen entspricht, kann ich nicht sagen.



Offline hansdampf8

  • Newbie
  • Beiträge: 5
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #7 am: Juni 16, 2017, 19:03:00 »
Hallo und nochmal allen Beteiligten großen Dank!

Leider entspricht die Filterung noch nicht ganz meinen Erwartungen. ;)
Ich bin während der Zeit auch etwas tätig gewesen und habe eine ähnliche Filterung gebaut. Dort habe ich aber genau das selbe Problem. Die erste Felterung von den Branchen zu den Positionen funktioniert super. Die nächte Stufe aber filter nicht nur die gesuchte Position in den gewählten Branchen sonder von allen und gibt sie aus.

Anbei ein Bild welches die Problematik veranschaulicht und meine erweiterte DB mit dem frm_test in der meine Filterversion steckt.

Nochmal ganz großen Dank für eure Hilfe!!!

Gruß aus MeckPom
 

Offline hansdampf8

  • Newbie
  • Beiträge: 5
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #8 am: Juni 18, 2017, 17:06:33 »
Hallo liebe Access-o-Mania Gemeinde!

Ich möchte euch die frohe Botschaft, dass ich mein Problem endlich lösen konnte, natürlich nicht vorenthalten.
In den letzten Tagen habe ich ehrlich gesagt nicht viel geschlafen und mir ging dieses Problem einfach nicht aus dem Kopf.
Nach etlichen Videos/Artikel und unzähligen Versuchen ist mir die rettende Idee gekommen.
Eigentlich simpel aber ich bin nicht drauf gekommen einfach ein AND in die WHERE Anweisung einzubauen und die erste For Each Schleife in der zweiten zu wiederholen.
Aus jetziger Sicht logisch, da er sonst anstelle der selektierten Branchen ja alle nimmt.

Ich möchte mich nochmals bei allen beteiligten bedanken und wünsche noch einen sonnigen Sonntag :D

Anbei den Code falls jemand Interesse hat.
Private Sub cmdZeigePositionen_Click()
Dim varItem1 As Variant
Dim strSearch1 As String

For Each varItem1 In Me.lst_Branchen.ItemsSelected
strSearch1 = strSearch1 & "," & Me.lst_Branchen.ItemData(varItem1)
Next varItem1
If Len(strSearch1) = 0 Then
    lngIDBranchen = Null
    Else
        strSearch1 = Right(strSearch1, Len(strSearch1) - 1)
End If
Me.lst_Position.RowSource = "select distinct lngIDPosition, txtPosition from qry_HauptFilter where ([lngIDBranchen] in (" & strSearch1 & "))"
End Sub


Hier der Button zum anzeigen der Mitarbeiter ohne Duplikate aus den gewählten Branchen u Positionen.
Private Sub cmdZeigeMitarbeiter_Click()
Dim varItem1, varItem2 As Variant
Dim strSearch1, strSearch2 As String

For Each varItem1 In Me.lst_Branchen.ItemsSelected
strSearch1 = strSearch1 & "," & Me.lst_Branchen.ItemData(varItem1)
Next varItem1
If Len(strSearch1) = 0 Then
    lngIDBranchen = Null
    Else
        strSearch1 = Right(strSearch1, Len(strSearch1) - 1)
End If
For Each varItem2 In Me.lst_Position.ItemsSelected
strSearch2 = strSearch2 & "," & Me.lst_Position.ItemData(varItem2)
Next varItem2
If Len(strSearch2) = 0 Then
    lngIDPosition = Null
    Else
        strSearch2 = Right(strSearch2, Len(strSearch2) - 1)
End If
Me.lst_Mitarbeiter.RowSource = "select distinct txtVorname, lngIDFirmen,txtFirmenName  from qry_HauptFilter where ([lngIDBranchen] in (" & strSearch1 & ")) AND ([lngIDPosition] in (" & strSearch2 & "))"
End Sub




 
Folgende Mitglieder bedankten sich: PhilS

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1347
Re: Listenfelder als Filter mit Mehrfachauswahl
« Antwort #9 am: Juni 19, 2017, 15:15:01 »
Hallo Hans,
Schön, dass du es geschafft hast.
Mir ist allerdings Folgendes aufgefallen, dass oft missverstanden wird.
Dim strSearch1, strSearch2 As StringWenn du das so schreibst, ist strSearch1 auch vom Typ Variant!
Besser und lesbarer ist
Dim varItem1 As Variant
Dim varItem2 As Variant
Dim strSearch1 As String
Dim strSearch2 As String

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 
Folgende Mitglieder bedankten sich: hansdampf8