Hallo Zusammen,
ich habe eine Inventardatenbank mit einem Formular in dem die aktuell in diesem Jahr (aktuellem Jahr) zu prüfenden Gegenstände angezeigt werden. Wenn der entsprechende Gegenstand geprüft ist, wird ein nächster Prüftermin (Prüfjahr), je nach vergebenen Monaten für den Prüfintervall vergeben.
Die Anzeige-Abfrage sieht wie folgt aus:
SELECT qryPruefenGroupBasis.InventarNr, qryPruefenGroupBasis.Typ, qryPruefenGroupBasis.Pruefer, qryPruefenGroupBasis.KfzKenn, qryPruefenGroupBasis.Wechselmodul, qryPruefenGroupBasis.Geraeteraum, qryPruefenGroupBasis.Ausmusterzeit, qryPruefenGroupBasis.Prüf_M_J, qryPruefenGroupBasis.Ausmusterdat, qryPruefenGroupBasis.Beschaffkosten, qryPruefenGroupBasis.Beschaffdat, qryPruefenGroupBasis.BjHerstelldat, qryPruefenGroupBasis.Hersteller, qryPruefenGroupBasis.Seriennummer, qryPruefenGroupBasis.Typenschild, qryPruefenGroupBasis.Pruefintervall, qryPruefenGroupBasis.Ausgemustert, qryPruefenGroupBasis.Prüf_M_J, qryPruefenGroupBasis.frm_rptNr
FROM qryPruefenGroupBasis
GROUP BY qryPruefenGroupBasis.InventarNr, qryPruefenGroupBasis.Typ, qryPruefenGroupBasis.Pruefer, qryPruefenGroupBasis.KfzKenn, qryPruefenGroupBasis.Wechselmodul, qryPruefenGroupBasis.Geraeteraum, qryPruefenGroupBasis.Ausmusterzeit, qryPruefenGroupBasis.Ausmusterdat, qryPruefenGroupBasis.Beschaffkosten, qryPruefenGroupBasis.Beschaffdat, qryPruefenGroupBasis.BjHerstelldat, qryPruefenGroupBasis.Hersteller, qryPruefenGroupBasis.Seriennummer, qryPruefenGroupBasis.Typenschild, qryPruefenGroupBasis.Pruefintervall, qryPruefenGroupBasis.Ausgemustert, qryPruefenGroupBasis.Prüf_M_J, qryPruefenGroupBasis.frm_rptNr
HAVING (((Max(qryPruefenGroupBasis.[Nächste Prüfung Jahr]))=Year(Date())));
Nun habe ich das Problem das ein Gegenstand den ich im aktuellen Jahr bereits geprüft habe und sein nächster Prüftermin nun in der Zukunft liegt (nächstes Jahr oder noch weiter), trotzdem noch angezeigt wird, auch nach update des Formulars bzw. Abfrage. Das liegt daran das der Gegenstandes auch noch Datensätze vom aktuellem Jahr (aber auch in der Vergangenheit) als Prüfdatum besitzt und den neuen in der Zukunft.
Nun bräuchte ich einen Ausschluß aller Gegenstände die bereits ein Prüfdatum in der Zukunft gegenüber dem aktuellem Jahr besitzen.
Hätte jemand einen Lösungsansatz für mich?
Gruss
mad
Hallo,
ganz genau versteh ich das jetzt nicht.
Was willst Du anzeigen:
-- DS mit nur aktuellem Jahr
-- DS mit aktuellem Jahr und den vergangenen Jahren
-- DS mit aktuellem Jahr und zukünftigen Jahren
suchst Du vielleicht sowas:
.....[Nächste Prüfung Jahr]))<=Year(Date())));
Zudem würde ich die Having-Codiion in Where-Condition umschreiben:
... Where [Nächste Prüfung Jahr]<=Year(Date()) ...
und: Verzichte doch endlich auf Leer- (und Sonder-)zeichen..
Hallo,
Leerzeichen und Sonderzeichen (Altlast) bin ich gerade am entfernen.
Zitat
.....[Nächste Prüfung Jahr]))<=Year(Date())));))<=Year(Date())));
das ist nicht das was ich erreichen möchte.
es sollen nur Gegenstände angezeigt werden der als [Naechste_Pruefung_Jahr] das Aktuelle Jahr haben, wenn er bereits eine [Naechste_Pruefung_Jahr] in der Zukunft (nächste Jahr oder weiter) hat, weil er in diesem Jahr bereits geprüft wurde, dann soll er nicht angezeigt werden.
Grundsätzlich werden immer nur die letzten Daten eines Gegenstandes angezeigt:
Zitat...(((Max(qryPruefenGroupBasis.[Nächste Prüfung Jahr]))=Year(Date())));
Ich hoffe ich konnte es etwas besser erklären was ich erreichen möchte.
Gruss
mad
Hallo,
Zitat
(Max(qryPruefenGroupBasis.[Nächste Prüfung Jahr]))=Year(Date())));
Grundsätzlich werden immer nur die letzten Daten eines Gegenstandes angezeigt:
eher nicht.
Es wird die Gruppe angezeigt, wenn deren höchste Jahreszahl dem aktuellen Jahr entspricht.
Wenn es in einer Gruppe ein Jahr in der Zukunft gibt, dann wird diese Gruppe nicht angezeigt. Ebenso wenig die Gruppe, die nur Jahreszahlen kleiner als das aktuelle Jahr enthalten.
Leider nicht.
Vielleicht ist es besser an dem Beispiel im Anhang (Bild) zur verstehen.
Kriterium ....=Year(Date()) wurde hier mal weggelassen.
Die Inventarnur 2.03.007.0002 hat schon mehrere Prüfungen durchlaufen, auch in diesem Jahr (2019) schon. Nun hat sie bereits ein neues nächstes Prüfjahr erhalten, in diesem Fall das Jahr 2020. Und wegen dieses Umstandes soll diese InventarNr im aktuellen Jahr dann nicht mehr zur Prüfung angezeigt werden da sie erst in 2020 wieder dran ist.
Vermutlich wird diese InventarNr angezeigt weil sie auch für 2019 ein Prüfdatum hatte!
Aber wie gesagt es gibt auch Gerätschaften mit einem Prüfintervall von zwei (z.B. PKW-TÜV) oder mehr Jahren. Das sollte berücksichtigt werden.
Gruss
mad
Zitatwird ein nächster Prüftermin (Prüfjahr), je nach vergebenen Monaten für den Prüfintervall vergeben
Ich würde den TERMIN wörtlich nehmen, also ein Datum. Das Jahr uva. kann man einfach vom Datum ableiten und auch als entsprechendes Formate zur Ansicht bringen.
Mit einem Datum kann man aber hervorragend rechnen.
WHERE NaechsterPruefTermin > Date()
AND NaechsterPruefTermin < DateAdd("yyyy", 2, Date())Zeiträume beschreibt man am Besten über ihre Grenzwerte. Über die kann man dann auch filtern.
Hier gibt es einen Ansatz zu einem sehr ähnlichen Sachverhalt, etwas variabler gestaltet:
DateDiff Abfrage für Monat und Jahr (https://www.access-o-mania.de/forum/index.php?topic=24409.msg143630#msg143630)
Hallo,
und es wäre sinnvoll des SQL-String der Abfrage qryPruefenGroupBasis und ein paar DS aus der Abfrage-Ansicht zu zeigen...
Vermutlich ist auch die vorher gezeigte gruppierende Abfrage "überladen" und sollte auf die notwendigen Felder reduziert werden:
SELECT InventarNr, Typ, First([Nächste Prüfung Jahr])
FROM qryPruefenGroupBasis
GROUP BY InventarNr, Typ
HAVING Max([Nächste Prüfung Jahr])=Year(Date())
Hallo,
habe das nun wie folgt umgesetzt:
SELECT qryPruefenGroupBasis.InventarNr, Format([InventarNr],"0\.00\.000\.0000") AS InvNr, qryPruefenGroupBasis.Typ, First(qryPruefenGroupBasis.Naechste_Pruefung_Jahr) AS ErsterWertvonNaechste_Pruefung_Jahr
FROM qryPruefenGroupBasis
GROUP BY qryPruefenGroupBasis.InventarNr, Format([InventarNr],"0\.00\.000\.0000"), qryPruefenGroupBasis.Typ
HAVING (((Max(qryPruefenGroupBasis.Naechste_Pruefung_Jahr))=Year(Date())));
es funktioniert, super.
Vielen herzlich Dank.
Gruss
Mad