Neuigkeiten:

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

Mobiles Hauptmenü

Abfragefilter mehrerer Optionsfelder

Begonnen von MichaelSt, Februar 02, 2021, 15:28:56

⏪ vorheriges - nächstes ⏩

MichaelSt

Hallo, zunächst mal habe ich recht bescheidene Programmierkenntnisse, habe mir allerdings über die Foren schon so einiges angeeignet und bereits eine recht umfangreiche Datenbank zusammen gebastelt. Allerdings sitze ich hier gerade über einem zumindest für mich recht kniffligen Problem:

Ich  habe eine Tabelle "tbl_Dauerauftrag" und eine Tabelle "tbl_Auftrag" Die Daten aus tbl_Dauerauftrag sollen zur weiteren Verarbeitung per Anfügeabfrage in tbl_Auftrag angefügt werden. Da es sich wie der Name schon sagt um Daueraufträge handelt kommen diese regelmäßig vor und sollen dementsprechend nach Fahrtag gefiltert angefügt werden. Hierzu habe ich der tbl_Dauerauftrag insgesamt 8 Optionsfelder verpasst für jeden Wochentag eins plus eins für Feiertag. Feiertag ist erst mal außen vor, da ich da noch einiges vor zu bereiten habe.

Jetzt möchte ich mich zunächst mit der Anfügeabfrage beschäftigen und hänge da mit den Filtern für die Optionsfelder. Ich habe bereits eine Abfrage erstellt, und schon mal einen Filter für die Laufzeit erstellt. Zudem habe ich ein Feld "Heute" in der Abfrage erstellt welches das aktuelle Datum ausgibt, dabb boch eines "WT" welches den Wochentag als Zahl ausgibt.

SQL:
SELECT kun_ID_f, ma_ID_f_Verkaufer
,ma_ID_f_Disponent, ma_ID_f_Fahrer1
,ma_ID_f_Fahrer2, aufst_ID_f
,dauf_Preis, dauf_istNetto
,za_ID_f, mwst_ID_f
,dauf_ersterFahrtag, dauf_Auftragsende
,dauf_Fahrplan, dauf_Montag
,dauf_Dienstag, dauf_Mittwoch
,dauf_Donnerstag, dauf_Freitag
,dauf_Samstag, DATE () AS Heute, Weekday([Heute], 2) AS WT
,dauf_Sonntag, dauf_Feiertag
FROM tbl_Dauerauftrag
WHERE dauf_ersterFahrtag <= DATE () AND dauf_Auftragsende > DATE ()

Wie muss ich da jetzt die Filter für die jeweiligen Tage setzen, so dass immer nur die Datensätze des jeweiligen Wochentags angezeigt werden?

Vielen Dank im Vorraus

MzKlMu

Hallo,
Zitatdes jeweiligen Wochentags angezeigt werden?
Welcher Wochentag, dem von heute ?
Was steht dennin den Wochtagsfeldern, sind da Ja/Nein Felder ?

PS:
Ich habe die Abfrage mal formatiert. Die Tabellennamen vor den Feldnamen sind überflüssig und die Klammerinflation in der Where Klausel auch.

Gruß Klaus

MichaelSt

Ja, es sind JA/Nein Felder.
Ja erst mal Wochentag der von heute, aber so, dass es sich auch mit fortlaufendem Datum entsprechend verändert.

Die Klammern sind glaube ich nicht von mir sondern vom Abfrageautomaten.

MzKlMu

Hallo,
die Liefertage sollten als extra Tabelle angelegt werden, je Liefertag ein Datensatz. Und im Feld dann die Zahl für den Wochentag.
Dann ist das Filtern auf den Wochentag eine Kleinigkeit, so wie das jetzt ist, sind die Wochentage Feldnamen und da fällt mir im Moment keine rechte Lösung ein.
Kannst Du bitte mal ein Bild des Beziehungsfensters hier zeigen ?
Gruß Klaus

MichaelSt

Das Problem bei der Lösung ist, dass es auch vorkommen kann dass die Touren an mehreren Tagen gefahren werden können. Was bedeutet um alle Möglichkeiten über eine Tabelle abzudecken wird es ganz schnell sehr unübersichtlich.

Das Beziehungsfenster ist mittlerweile sehr Komplex und daher auch recht unübersihtlich geworden. Aber ich poste hier mal nen Auszug daraus:
Sie dürfen in diesem Board keine Dateianhänge sehen.

MichaelSt

Habe ne Lösung gefunden:
Man muss zunächst über eine weitere Abfrage die JA/NEIN felder per "Wenn" Funktion in Zahlen 1-7 umwandeln, dann kann man in der eigentlichen Abfrage die Filter setzten:

SQL Neue Abfrage:

SELECT tbl_Dauerauftrag.dauf_Auftragsnummer, IIf([tbl_Dauerauftrag]![dauf_Montag]=True,1,0) AS Mo, IIf([tbl_Dauerauftrag]![dauf_Dienstag]=True,2,0) AS Di, IIf([tbl_Dauerauftrag]![dauf_Mittwoch]=True,3,0) AS Mi, IIf([tbl_Dauerauftrag]![dauf_Donnerstag]=True,4,0) AS Do, IIf([tbl_Dauerauftrag]![dauf_Freitag]=True,5,0) AS Fr, IIf([tbl_Dauerauftrag]![dauf_Samstag]=True,6,0) AS Sa, IIf([tbl_Dauerauftrag]![dauf_Sonntag]=True,7,0) AS So, Date() AS Datum, Weekday(Date(),2) AS WT, IIf([tbl_Dauerauftrag]![dauf_Feiertag]=True,8,0) AS FT
FROM tbl_Dauerauftrag;

und SQL die eingentliche Abfrage:

SELECT tbl_Dauerauftrag.kun_ID_f, tbl_Dauerauftrag.ma_ID_f_Verkaufer, tbl_Dauerauftrag.ma_ID_f_Disponent, tbl_Dauerauftrag.ma_ID_f_Fahrer1, tbl_Dauerauftrag.ma_ID_f_Fahrer2, tbl_Dauerauftrag.aufst_ID_f, tbl_Dauerauftrag.dauf_Preis, tbl_Dauerauftrag.dauf_istNetto, tbl_Dauerauftrag.za_ID_f, tbl_Dauerauftrag.mwst_ID_f, tbl_Dauerauftrag.dauf_ersterFahrtag, tbl_Dauerauftrag.dauf_Auftragsende, tbl_Dauerauftrag.dauf_Fahrplan, abfr_daufTagesdaten.Mo, abfr_daufTagesdaten.Di, abfr_daufTagesdaten.Mi, abfr_daufTagesdaten.Do, abfr_daufTagesdaten.Fr, abfr_daufTagesdaten.Sa, abfr_daufTagesdaten.So, abfr_daufTagesdaten.Datum, abfr_daufTagesdaten.WT, abfr_daufTagesdaten.FT
FROM tbl_Dauerauftrag INNER JOIN abfr_daufTagesdaten ON tbl_Dauerauftrag.dauf_Auftragsnummer = abfr_daufTagesdaten.dauf_Auftragsnummer
WHERE (((tbl_Dauerauftrag.dauf_ersterFahrtag)<=Date()) AND ((tbl_Dauerauftrag.dauf_Auftragsende)>Date()) AND ((abfr_daufTagesdaten.Mo)=[wt])) OR (((tbl_Dauerauftrag.dauf_ersterFahrtag)<=Date()) AND ((tbl_Dauerauftrag.dauf_Auftragsende)>Date()) AND ((abfr_daufTagesdaten.Di)=[wt])) OR (((tbl_Dauerauftrag.dauf_ersterFahrtag)<=Date()) AND ((tbl_Dauerauftrag.dauf_Auftragsende)>Date()) AND ((abfr_daufTagesdaten.Mi)=[wt])) OR (((tbl_Dauerauftrag.dauf_ersterFahrtag)<=Date()) AND ((tbl_Dauerauftrag.dauf_Auftragsende)>Date()) AND ((abfr_daufTagesdaten.Do)=[wt])) OR (((tbl_Dauerauftrag.dauf_ersterFahrtag)<=Date()) AND ((tbl_Dauerauftrag.dauf_Auftragsende)>Date()) AND ((abfr_daufTagesdaten.Fr)=[wt])) OR (((tbl_Dauerauftrag.dauf_ersterFahrtag)<=Date()) AND ((tbl_Dauerauftrag.dauf_Auftragsende)>Date()) AND ((abfr_daufTagesdaten.Sa)=[wt])) OR (((tbl_Dauerauftrag.dauf_ersterFahrtag)<=Date()) AND ((tbl_Dauerauftrag.dauf_Auftragsende)>Date()) AND ((abfr_daufTagesdaten.So)=[wt]));


MzKlMu

Hallo,
Das Problem bei der Lösung ist, dass es auch vorkommen kann dass die Touren an mehreren Tagen gefahren werden können.Gerade dann wäre die extra Tabelle erst recht sinnvoll. Als n:m Tablelle mit einem Feld für die Tour (bzw. deren ID) und einem Feld für den Wochentag (als Zahl, 1-7).
Tour   WT
  1    2
  1    4
  1    5
  2    1
  2    3
  2    6
  3    1
  3    3
usw.
Dann kannst Du jeder Tour beliebige Wochentage zuteilen. Das wird sehr übersichtlich und vor allen Dingen sehr einfach in der Auswertung.
Einfach auf 3 gefiltert = alle Touren für Mittwoch.

Werden die Feiertage ausgeschlossen, also an Feiertagen keine Touren ?
Gruß Klaus

MichaelSt

Ist auch eine gute Lösung, nur ich habe auch an die Bedienfreundlichkeit gedacht und da ist das mit den Kästchen meiner Meinung nach doch einfacher. Die Wochentage sind ja Feststehend von daher wird was das angeht ja keine Variable Funktion benötigt.

Nein, es wird zum Teil auch an Feiertagen gefahren allerdings ist das ein wenig komplizierter und bis lang ist das Feiertagsfeld zur Vorbereitung. Dazu muss ich erst mal eine "Feiertagstabelle" erstellen um diese festzulegen und die dann per Datum abzufragen. Mit dem Ergebnis dann den Wochentags Filter weiter ausbauen, das Werktags Touren ja nicht für Feiertage übermittelt werden sollen. Da stelle ich mir in der Anwendung dann ein Popup Vor, mit einer entsprechenden Meldung und Vorschlägen für den Umgang, da es auch mal Vorkommt dass eine Donnerstagstour dann an einem Freitag gefahren werden kann bzw. am Mittwoch.

Und dann Kommen die Feiertagstouren auch noch, wobei es da dann auch wieder etliche Varianten gibt anhand der Feiertags-Wochentags Konstellation. Beispielsweise wird in der Regel Heiligabend wie an einem Samstag gefahren, dann sind der 25. und 26. 12 zwei aufeinander folgende Feiertage wo in der Regel nur an einem von beiden gefahren wird, dann gibt es die Konstellation dass Samstag bzw. Montag ein Feiertag ist und Sonntag ein "normaler" Sonntag. auch hier wird nur an einem der beiden Tage gefahren.

Und dazu habe ich mir noch keinerlei Gedanken gemacht wie man das Umsetzen kann.

Ich gehe das alles Stück für Stück durch, wenn ich einen Teil fertig habe, teste ich den dann auch gleich und komme so bis lang am besten voran. Da ich dann auch direkt Fehler finde und diese so auch schneller ausmerzen kann ich den Aufbau noch direkt im Kopf habe und nicht lange Unterlagen wälzen - bzw. mich in die Sache erst wieder hinein denken muss.

MzKlMu

Hallo,
mit den Anforderungen die Du hast, wirst Du mMn um einen Umbau nach meinem Vorschlag nicht herumkommen.
Du wirst sonst immer solche Krücken (ja es sind Krücken) erfinden müssen wie die Abfragen in #5.
Und Du wirst auch immer weniger Hilfe bekommen, weil solche krücken keiner erfinden will.
Gruß Klaus