Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Datum aufrechnen

Begonnen von Graydens, November 09, 2024, 18:06:17

⏪ vorheriges - nächstes ⏩

Graydens

Hallo
Ich würde gerne bei einem Datumsfeld einen "Kriterien" Eintrag machen.

Die Abfrage soll prüfen welche Werte zwischen dem eingetragenen Datum + 3 Monate und dem heutigen tag liegen.

Also Bereich (EingetragenesDatum + 3Monate) bis Heute().

Hatte das mit "Zwischen DatAdd("m";3;[LetzterT]) Und Datum()" probiert. Leider wird alles gefiltert.

Schreibe ich

"Nicht Zwischen DatAdd("m";3;[LetzterT]) Und Datum()" sehe ich alle Einträge

lg

Hondo

Hallo,
ist LetzterT ein tatsächlicher Feldname?
Hab das mal bei mir ausprobiert und funktioniert wie gewünscht:
Zwischen DatAdd("m";500;[geboren]) Und Datum()

Zeig mal deine komplette Abfrage als SQL-String bitte.
Gruß Andi

Graydens

Hallo

Der richtige wäre LetzterWartungstermin.
Anbei Foto und Code.

Hoffe du meintest das so.

lg

SELECT Land.Land, Kundendaten.Ort, Kundendaten.[Kd Name], [Kamera Typ].[Kamera Typ], Kundendaten.Wartungsvertrag, Techniker.Techniker, Techniker.Techniker, Kundendaten.LetzterWartungstermin, Kundendaten.reserviert, Kundendaten.gebucht
FROM Land INNER JOIN ([Kamera Typ] INNER JOIN (Techniker INNER JOIN Kundendaten ON Techniker.ID = Kundendaten.[1 Techniker]) ON [Kamera Typ].ID = Kundendaten.[Kamera Typ]) ON Land.ID = Kundendaten.Land
WHERE (((Kundendaten.LetzterWartungstermin) Between DateAdd("m",3,[LetzterWartungstermin]) And (Date())) AND ((Kundendaten.reserviert) Is Null) AND ((Kundendaten.gebucht) Is Null))
ORDER BY Kundendaten.LetzterWartungstermin;


Hondo

#3
Hallo,
der Fehler liegt sicherlich nicht am Kriterium.
Vereinfache die Abfrage und wenn sie funktioniert dann kompliziere sie schrittweise:

SELECT Ort, [Kd Name], Wartungsvertrag, LetzterWartungstermin, reserviert, gebucht
FROM Kundendaten
WHERE Kundendaten.LetzterWartungstermin Between DateAdd("m",3,[LetzterWartungstermin]) And Date()
ORDER BY Kundendaten.LetzterWartungstermin;

Aber was macht die Abfrage denn Genau? Mit eigenen Worten nämlich dies:
Zeig mir alle Datensätze wo der letzteWartungstermin zwischen Heute und 3 Monaten nach dem letzteWartungstermin liegt.

Da können nur Termine angezeigt werden die genau Heute statt gefunden haben. Also eher keine.
Deine Abfrage ist im Detail komplett falsch. Was genau möchtest du denn Filtern? Wartungstermin innerhalb der letzten 3 Monaten oder was?

Gruß Andreas

BTW:
Falls du nicht verstehst was ich eigentlich meine, zwei Beispiele:

Angenommen letzterWartungstermin war der 11.10.2023
3 Monate darauf gerechnet ist der 11.1.2024. Wie kann der 11.10.23 zwischen dem 11.1.24 und heute liegen? Nicht möglich.
Oder letzterWartungstermin der 14.09.2024:
Dann müsste der 14.09.24 zwischen dem 14.12.24 und heute (also negativ?!) liegen. Auch nicht möglich.
Denke es ist klar geworden.

Graydens

Ich trage Wartungstermine in ein Feld ein......zb letzter war am 25.07.2024.

Danach sollen 3 Monate vergehen und der Termin soll mir wieder in der Liste erscheinen.
Sobald ich eines der beiden anderen Felder mit "Ist Null" wieder befülle bleibt der Termin in der Liste. So können wir Techniker sehen welche Termine wieder zum ausmachen wäre. Intervall ist immer ca ein halbes Jahr, je nach letzter Termin.

lg

Graydens

PS: Stimmt wo du es sagt ist die Abfrage kompletter Schwachsninn. Mein Gedanke war 3 Monate zum Temrin dazu zu zählen.

Hondo

#6
Hallo,
Zitat von: Graydens am November 09, 2024, 21:42:55Danach sollen 3 Monate vergehen und der Termin soll mir wieder in der Liste erscheinen.
Dann muss dein Kriterium wie folgt lauten:
Where DateAdd("m",3,[LetzterWartungstermin]) < Date()
Gruß Andreas

Graydens

Leider mit Fehlermeldung.

Habs so:
Where DateAdd("m",3,[LetzterWartungstermin]) > Datum()

und so:
Where DateAdd("m";3;[LetzterWartungstermin]) > Datum()

Sie dürfen in diesem Board keine Dateianhänge sehen.

lg

Hondo

Date(), nicht Datum() im SQL-Editor.
Sorry mein Fehler

Btw:
wenn du die Spalte mit dem Kriterium nicht breit ziehst kann man das Kriterium nicht erkennen, dann kannst du dir das Bild sparen.

Graydens

Hallo nochmal
Der SQL Code sieht jetzt so aus:

SELECT Land.Land, Kundendaten.Ort, Kundendaten.[Kd Name], [Kamera Typ].[Kamera Typ], Kundendaten.Wartungsvertrag, Techniker.Techniker, Techniker.Techniker, Kundendaten.LetzterWartungstermin, Kundendaten.reserviert, Kundendaten.gebucht
FROM Land INNER JOIN ([Kamera Typ] INNER JOIN (Techniker INNER JOIN Kundendaten ON Techniker.ID = Kundendaten.[1 Techniker]) ON [Kamera Typ].ID = Kundendaten.[Kamera Typ]) ON Land.ID = Kundendaten.Land
WHERE (((Kundendaten.reserviert) Is Null) AND ((Kundendaten.gebucht) Is Null) AND ((DateAdd("m",3,[LetzterWartungstermin]))>Date()))
ORDER BY Kundendaten.LetzterWartungstermin;

Ich kriege jetzt aber auch Termine von Oktober rein, die ja eigentlich erst in 3 Monaten auftauchen sollten?

lg

Sie dürfen in diesem Board keine Dateianhänge sehen.


Hondo

#10
Hm, du kennst scheinbar die Eingabeweise im SQL-Editor nicht.
Ansicht SQL auswählen, folgendes eingeben:

SELECT Land.Land, Kundendaten.Ort, Kundendaten.[Kd Name], [Kamera Typ].[Kamera Typ], Kundendaten.Wartungsvertrag, Techniker.Techniker, Techniker.Techniker, Kundendaten.LetzterWartungstermin, Kundendaten.reserviert, Kundendaten.gebucht
FROM Land INNER JOIN ([Kamera Typ] INNER JOIN (Techniker INNER JOIN Kundendaten ON Techniker.ID = Kundendaten.[1 Techniker]) ON [Kamera Typ].ID = Kundendaten.[Kamera Typ]) ON Land.ID = Kundendaten.Land
WHERE ((DateAdd("m",3,[LetzterWartungstermin]) < Date()) AND ((Kundendaten.reserviert) Is Null) AND ((Kundendaten.gebucht) Is Null))
ORDER BY Kundendaten.LetzterWartungstermin;

Graydens

alles gut :-)

es wäre < Date() gewesen nicht > Date()

Danke dir vielmals. Jetzt funktinierts

Hondo

Ja kleiner Date()
>Date() würde ja bedeuten die 3 Monate sind noch nicht rum.

Gruß Andreas