online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Floriel vom 21.10.2020, 18:45 Options

Form nach mehreren Parametern filtern

Da ich die Originaldaten nicht veröffentlichen kann, hier eine kleine Abstrahierung meines Problems:

Ich habe eine Tabelle1 :

ID | Postleitzahlt | Name
1 | 12345 | Mayer
2 | 34251 | Müller
3 | 12345 | Köhler
4 | 27590 | Bäcker
5 | 34251 | Mustermann

und eine Tabelle2 :

ID | Werbeaktion | Aktionsreichweite
1 | Aktion1 | 12345
2 | Neueröffnung | 12345;34251;27590
3 | Rabattaktion | 27590;12345

In FormA kann eine Werbeaktion aus Tabelle1 in einem Dropdownfeld ausgewählt werden. Ein Button in FormA soll nun FormB aufrufen und ihr die zugehörigen Postleitzahlen übergeben, so dass in FormB nur die Kunden mit einer entsprechenden Postleitzahl angezeigt werden.

Für "Rabattaktion" müsste die Tabelle in FormB also wie folgt aussehen:

ID | Postleitzahlt | Name
1 | 12345 | Mayer
3 | 12345 | Köhler
4 | 27590 | Bäcker

Das ganze unter Access 2007


Antwort schreiben

Antwort 1 von lorf55 vom 22.10.2020, 13:41 Options

Hallo Floriel,
also mal grob skizziert:
Eine Variante wäre, mit dem Formular-Filter zu arbeiten. Dabei würde man in FormB
    unter Eigenschaften - Daten - Datenherkunft denselben Eintrag wie in FormA machen und
    unter Filter ="Postleitzahl="&Formulare!FormA!Postleitzahl und
    unter Filter zulassen Ja eintragen
und
einen Button zum Formularöffnen in FormA einfügen.

Eine andere Variante wäre, indem du eine Befehlsschaltfläche für Formularoperationen -> Formularöffnen in FormA einfügst und dabei die Abfrage oder die Tabelle für FormA verwendest und denn auswählst "Das Formular öffnen und bestimmte Daten suchen und anzeigen" und denn wird ein passendes Klick-Ereignis in FormA eingefügt.

Am Einfachsten ist wohl Variante 2 für dich.

Gruß
lorf

Antwort 2 von Floriel vom 23.10.2020, 12:46 Options

Ein Problem bei beiden Varianten (wenn ich das richtig sehe) ist die Form in der die Postleitzahlen in Tabelle2 gespeichert sind: ein String bestehend aus ein oderer mehreren Postleitzahlen, die durch Semikolon getrennt sind.

Antwort 3 von lorf55 vom 23.10.2020, 22:07 Options

Hallo Floriel,
diesen String der Postleitzahlen musst du umwandeln in die WHERE-Klausel einer SQL-Abfrage und denn als Filter eintragen, d.h. aus 12345;34251;27590
wird der Filter:
((Postleitzahl='12345') OR (Postleitzahl='34251') OR (Postleitzahl='27590'))
bzw. die Anweisung im Klickereignis bei Variante 2:
    stLinkCriteria = "[Postleitzahl]=" & "'" & Me![PLZ1] & "') OR ([Postleitzahl]=" & "'" & Me![PLZ2] & "') OR ([Postleitzahl]=" & "'" & Me![PLZ3] & "')"
    DoCmd.OpenForm stDocName, , , stLinkCriteria


Falls die PLZ nicht einzeln vorliegen, muss man die natürlich noch aus dem String auslösen, aber ich glaube das kannst du.
Oder?

Gruß
lorf

Antwort 4 von lorf vom 24.10.2020, 00:12 Options

Falls dir das String auflösen nicht so leicht von der Hand geht,
habe ich hier eine Variante, wie man es auch machen kann:

Dim s As String
Dim is1 As Long
Dim stLinkCriteria As String

's = "12345;34251;27590"
's = "12345;34251"
's = "12345"

start = 1
stLinkCriteria = ""
Do
 is1 = InStr(start, s, ";")
 If is1 = 0 Then is1 = Len(s) + 1
 If start > 1 Then stLinkCriteria = stLinkCriteria & " OR "
 stLinkCriteria = stLinkCriteria & "([Postleitzahl]=" & "'" & Mid$(s, 
start, is1 - start) & "')"
 start = is1 + 1
Loop While (is1 < Len(s))

DoCmd.OpenForm stDocName, , , stLinkCriteria


Dem s-String musst du denn noch deinen String aus FormA
übergeben.

Gruß
lorf

Antwort 5 von Floriel vom 30.10.2020, 12:03 Options

So, ich habs jetzt ganz anderst gelöst, für alle die ein änliches Problem haben:

Zuerst hab ich die n:m Verknüfung "Aktionsreichweite" normalisiert:

Tabelle1 :

ID | Postleitzahl | Name
1 | 12345 | Mayer
2 | 34251 | Müller
3 | 12345 | Köhler
4 | 27590 | Bäcker
5 | 34251 | Mustermann

Tabelle2 :

ID | Werbeaktion
1 | Aktion1
2 | Neueröffnung
3 | Rabattaktion

Tabelle3:

ID | Werbeaktion | Postleitzahl
1 | Aktion1 | 12345
2 | Neueröffnung | 12345
3 | Neueröffnung | 34251
4 | Neueröffnung | 27590
5 | Rabattaktion | 27590
6 | Rabattaktion | 12345

Die Übergabe der ausgewählten Aktion erfolgt dann über die SQL Anweisung der Datensatzquelle von FormB (Einfach die komplette SQL Anweisung als String zusammensetzen und an Forms![FormB].Form.RecordSource übergeben).

Antwort 6 von lorf55 vom 30.10.2020, 22:08 Options

Ist ja tatsächlich gaaanz anderst.
Surprise, surprise.

Ähnliche Themen

Summewenn und Zählenwenn mit mehreren Kriterien mit Excel
JoeKe  17.05.2009 - 22592 Hits - 1 Antwort

Access 11 - neues Form erstellen
Nhuya  11.07.2007 - 33 Hits - 10 Antworten

wie geht auswahlbasiertes Filtern
frted  17.01.2008 - 17 Hits - 1 Antwort

Kalendersteuerelement zum Daten filtern
VoVo  21.03.2008 - 68 Hits - 2 Antworten

Filtern aus Formular
era  03.09.2008 - 62 Hits - 6 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Sun Jan 25 18:15:21 2026