Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Mehrfachauswahl mit Formularabfrage

Begonnen von MrsProd, August 11, 2014, 15:56:43

⏪ vorheriges - nächstes ⏩

DF6GL

Hallo,

ich denke, Du musst Dir erst mal im Klaren darüber werden, WAS und vor allem WIE gefiltert werden soll, in Anbetracht der Datenzusammenhänge..

Anbei die DB mit zum Einen der Filterung der Companys in Abhängigkeit der Countries, zum Anderen eine zusammenhanglose Filterung nach den 3 aktiven Listenfeldern.  Die ausgeblendeten Listenfelder habe ich außen vor gelassen, die kannst Du selber nach dem gezeigten Prinzip  erweitern, sofern das wirklich nötig sein sollte...


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MrsProd

Viiielen lieben Dank DF6GL für deine Hilfe, ohne dich wär ich wohl aufgeschmissen!  :)

Ich hab die Tabelle jetzt mal mit representativeren Daten gefüllt, dann wirds evtl etwas einfacher zu verstehen, was ich genau möchte.
Der Hintergrund meiner Datenbank ist folgender: ich möchte verschiedene Serieneinladungen zu verschiedenen Events versenden und meine Datenbank soll mir dazu dienen, die richtigen Leute zu finden für das passende Event. Daher sollte mein gefilteter Output in einer Tabelle (oder in einer Abfrage - was wäre dafür besser geeignet?) erfolgen, die ich dann in Word (oder einem andren Programm) als Datenquelle für einen Serienbrief nutzen kann.
Natürlich passt nicht jeder Kontakt zu jedem Event, daher die Mehrfachfilterung. Wenn ich z.b. zu einem Event einlade, das in Germany stattfindet, möchte ich jeweils nur Leute aus dem Näheren Umfeld (also Germany, Austria, Netherlands, Sweden usw.) einladen.
Dazu ist das evtl ein Event, das nur Leute interessiert die mit ein paar bestimmten Technologien zu tun haben oder einem bestimmten CompanyCluster oder einer WorkingGroup zugeordnet sind. Oder ich möchte speziell nur Leuter einiger Firmen die dem oberen und mittleren Management angehören und schon an vergangenen Events teilgenommen haben. Daher meine vielen Kriterien nach denen ich filtern möchte.

Jetzt ist bei mir auch der Groschen gefallen, was der genauer Unterschied zwischen einer Abhängigen und Unabhängigen Filterung ist. DANKE! 8)

Jetzt hab ich noch eine Frage: und zwar hab ich bei meinem CompanyCluster(und auch noch bei andren Feldern) ja folgenden Input:
End Customer, Project Management Consultant, FEED Contractor, EPC, OEM, System Integrator, Manufacture, Other
Einem Kontakt wird aber jetzt mehr als nur ein Kriterium zugeordnet, also z.b. in meiner Tabelle EPC, OEM, Other..
wie kann ich aber in meinem Formular vor der Filterung nur die oben genannten anzeigen lassen, ohne die mehrfachnennungen? Also damit wenn ich bei der Filterung EPC angebe, aber auch alle andren aufgerufen werden, die noch andere Kritieren haben. Sollte in der Demo-Datenbank genauer ersichtlich warden, was ich meine :)



MaggieMay

Hallo,
Zitat von: MrsProd am August 20, 2014, 10:59:08
oder in einer Abfrage - was wäre dafür besser geeignet?
eine Abfrage sollte genügen.
Zitatdie ich dann in Word (oder einem andren Programm) als Datenquelle für einen Serienbrief nutzen kann
Warum kannst du dafür keinen Access-Bericht einetzen?
Zitatwie kann ich aber in meinem Formular vor der Filterung nur die oben genannten anzeigen lassen, ohne die mehrfachnennungen?
Das sollte sich durch den Zusatz "Select DISTINCT ..." in der Abfrage bewirken lassen.


Freundliche Grüße
MaggieMay

MrsProd

Danke MaggieMay, mit select distinct funktionierts super!  :)

Wie kann ich denn meinen Output dann in einer Abfrage anzeigen lassen?
Ich hab jetzt folgenden Code verwendet, aber da spuckts mir leider alle Einträge meiner Tabelle aus.

DoCmd.OpenQuery "qryFilter", , acEdit

...und nochmal mein Problem genauer beschrieben mit den Mehrfachnennungen in meinen Listenfeldern. (siehe Bild)
am Beispiel Event Invitation: da werden jetzt alle aufgelistet, die so in meiner Tabelle vorkommen, also
Hanover Fair 14
R-Community 14
R-Community 14, Hanover Fair 14

ich möchte aber gern nur die zwei einzelnen anzeigen lassen, damit die Liste kleiner wird.  Es soll aber wenn ich R-Community auswähle in meiner Ausgabe alle anzeigen, bei denen R-Community vorkommt, also auch die, die noch bei der Hanover Fair 14 waren. Kann man das iwie programmieren?
So ist das ganze auch bei allen andren Feldern außer bei Firma und Country.


Wie setz ich denn alle meine Felder in Abhängigkeit von meiner Country auswahl?
Private Sub btnCompany_Click()
Dim Itm, strKrit As String

    For Each Itm In Me!lstCountry.ItemsSelected
        strKrit = strKrit & "','" & Me!lstCountry.Column(0, Itm)
    Next Itm

strKrit = Mid(strKrit, 3)

If Len(strKrit) Then strKrit = "Select distinct company from Invitation_list where country in (" & strKrit & "')"
Me!lstCompany.RowSource = strKrit


End Sub


Hab jetzt paar Möglichkeiten getestet die abhängige Filterung zu erweitern, die sich für mich als sinnvoll ergeben haben, aber hat leider nicht geklappt.. :o


DF6GL

Hallo,

also ich meine, Du solltest Dein Datenbank-Konzept nochmal genau durchdenken...

Deine Such-Methodik und überhaupt die Daten-Beziehungslogik erscheint nicht plausibel und datenbank-konform zu sein.


ZitatEs soll aber wenn ich R-Community auswähle in meiner Ausgabe alle anzeigen, bei denen R-Community vorkommt, also auch die, die noch bei der Hanover Fair 14 waren. Kann man das iwie programmieren?

Es ist ein Verstoß gegen die Daten-Normalisierung, in einem einzigen Feld mehrere Werte aufzulisten (und bringt daher Ärger und Verdruss).  Dafür ist eine weitere Tabelle herzunehmen, die für einen bestimmten Datensatz (Firma) die dazugehörenden Einladungen (eine pro Datensatz) zuordnet.


Um im gegenwärtigen Zustand die gewünschte Filterung zu erhalten, darf dann nicht mit der IN-Where-Condition gearbeitet werden, sondern es muss ein "Like"-Vergleich angestellt werden, im Prinzip beispielhaft etwa so:

... Where Invitation like '*" & Me!lstInvitation.Column(0,2) & "*'  Or Invitation like '*" & Me!lstInvitation.Column(0,3) & "*'"

Wobei die "2" und "3" die Itemsselected-Werte des entspr. Listenfeldes sein sollen.



ZitatWie setz ich denn alle meine Felder in Abhängigkeit von meiner Country auswahl?

Indem Du die Listenfelder mit der entspr. SQL in deren Eigenschaft "Rowsource" belegst:

.
.
If Len(strKrit) Then strKrit = "Select distinct Tabellenfeldname from Invitation_list where country in (" & strKrit & "')"
Me!lstListenfeld.RowSource = strKrit


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MrsProd

Zitatalso ich meine, Du solltest Dein Datenbank-Konzept nochmal genau durchdenken...

Deine Such-Methodik und überhaupt die Daten-Beziehungslogik erscheint nicht plausibel und datenbank-konform zu sein.

Wie sollte ich das denn am besten lösen? Hab mir das ganze einfach iwie zusammengereimt und drauf los programmiert, ohne große Gedanken dahinter. Bis lang macht es ja fast komplett alles, was ich möchte :)

Das abhängige filtern hab ich hinbekommen & funktioniert wunderbar, DANKE! :)

Jetzt fehlt mir nur noch die Ausgabe in einer Abfrage anstatt in der frm_Invitation_list, aber da gibt er einfach alle Werte aus..  :o


ich versteh leider nicht so ganz, wie das mit der like verknüpfung geht.. wo muss ich das jetzt beispielhaft hier einsetzen, bzw umschreiben?

Dim Itm, strKrit As String, strWC As String

    For Each Itm In Me!lstCountry.ItemsSelected
        strKrit = strKrit & "','" & Me!lstCountry.Column(0, Itm)
    Next Itm

strKrit = Mid(strKrit, 3)
If Len(strKrit) Then strWC = " And Country In (" & strKrit & "')"

strKrit = ""