Access97...DatDiff() zu einfach?

Hallo zusammen,

…es will mir einfach nicht gelingen, und ich ahne schon ,dass es wohl simpel ist - ich komme aber nicht drauf…
folgendes :
in einer adressdatenbank will ich eine geburtstagsliste für die nächsten 30 tage in einem bericht ausgeben.
Mit Datdiff() wirft mir die abfrage auch ganz toll differenzen zum vergangenen oder zukünftigen Geburtstag aus…nur glaubt ihr, ich schaffe es nur eine auswahl zwischen 1 und 30 herauszukriegen?
Unter dem Datdiff() Auswurf steht bei mir in den Kriterien zwischen 1 und 30, und access sagt mir, dass die datentypen falsch sind.
wie muß ich meine kriterien (zwischen 1 und 30) formulieren?

Ich hoffe, ihr wisst rat…vielen Dank
Carsten

Hallo Carsten,
So wie Du das beschrieben hast müßte es eigentlich funktionieren. Meistens liegt der Fehler nicht da wo man ihn sucht :wink:.
Schickst Du mir mal das SQL-Statement der Abfrage? (Links in der Toolbar kannst Du zwischen Entwurfs-, Daten- und SQL-Ansicht wechseln).

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo (netter Mensch, der sich um mein Problem kümmern will),

hier also meine sql…komischerweise kann ich im where mir die 19-65 jährigen herausfiltern, aber nicht in diesem Fall diejenigen, die in 146 Tagen Geburtstag haben.
Gruß
Carsten

SELECT Adressen.Anrede, Adressen.Vorname, Adressen.Name, Adressen.Strasse, Adressen.Plz, Adressen.Ort, Adressen.Geburtsdatum, Date() AS test, DateSerial(Year(Date()),Month([Geburtsdatum]),Day([Geburtsdatum])) AS DiesJahrGeb, DateDiff(„d“,[test],[DiesJahrGeb]) AS Diff, [DiesJahrGeb]-[test] AS Diff2, Day([Geburtsdatum]) & „.“ & Month([Geburtsdatum]) & „.“ & Year(Date()) AS DiesJahrGeb2, "Hamburg, den " & Date() AS Hamburg, [Vorname] & " " & [Name] AS Beides, DateDiff(„yyyy“,[Geburtsdatum],Date()) AS [Alter]
FROM Adressen
WHERE (((Adressen.Geburtsdatum)>#1/1/1901#) AND ((DateDiff(„d“,[test],[DiesJahrGeb]))=146) AND ((DateDiff(„yyyy“,[Geburtsdatum],Date())) Between 19 And 65));

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo (netter Mensch, der sich um mein Problem kümmern will),

bin eine gute Haut :smile:

also so wie ich das sehe machst du im SELECT:

SELECT ... FROM ... , Day([Geburtsdatum])) AS DiesJahrGeb

-> das ist ein Wert zwischen 1 und 31

und in der Where Clause machst Du mit diesem Wert ein Datediff

WHERE ... AND ((DateDiff("d",[test],[DiesJahrGeb]))=146) ...

Datediff ist aber der Meinung, daß es da unbedingt ein Datum will und nicht einen Wert zwischen 1 und 31

hoffe das wars

lg
Maria

hier also meine sql…komischerweise kann ich im where mir die
19-65 jährigen herausfiltern, aber nicht in diesem Fall
diejenigen, die in 146 Tagen Geburtstag haben.
Gruß
Carsten

SELECT Adressen.Anrede, Adressen.Vorname, Adressen.Name,
Adressen.Strasse, Adressen.Plz, Adressen.Ort,
Adressen.Geburtsdatum, Date() AS test,
DateSerial(Year(Date()),Month([Geburtsdatum]),Day([Geburtsdatum]))
AS DiesJahrGeb, DateDiff(„d“,[test],[DiesJahrGeb]) AS Diff,
[DiesJahrGeb]-[test] AS Diff2, Day([Geburtsdatum]) & „.“ &
Month([Geburtsdatum]) & „.“ & Year(Date()) AS DiesJahrGeb2,
"Hamburg, den " & Date() AS Hamburg, [Vorname] & " " & [Name]
AS Beides, DateDiff(„yyyy“,[Geburtsdatum],Date()) AS [Alter]
FROM Adressen
WHERE (((Adressen.Geburtsdatum)>#1/1/1901#) AND
((DateDiff(„d“,[test],[DiesJahrGeb]))=146) AND
((DateDiff(„yyyy“,[Geburtsdatum],Date())) Between 19 And 65));

Hallo Carsten,
So wie Du das beschrieben hast müßte es eigentlich
funktionieren. Meistens liegt der Fehler nicht da wo man ihn
sucht :wink:.
Schickst Du mir mal das SQL-Statement der Abfrage? (Links in
der Toolbar kannst Du zwischen Entwurfs-, Daten- und
SQL-Ansicht wechseln).

Hallo zusammen,

…es will mir einfach nicht gelingen, und ich ahne schon
,dass es wohl simpel ist - ich komme aber nicht drauf…
folgendes :
in einer adressdatenbank will ich eine geburtstagsliste für
die nächsten 30 tage in einem bericht ausgeben.
Mit Datdiff() wirft mir die abfrage auch ganz toll differenzen
zum vergangenen oder zukünftigen Geburtstag aus…nur glaubt
ihr, ich schaffe es nur eine auswahl zwischen 1 und 30
herauszukriegen?
Unter dem Datdiff() Auswurf steht bei mir in den Kriterien
zwischen 1 und 30, und access sagt mir, dass die datentypen
falsch sind.
wie muß ich meine kriterien (zwischen 1 und 30) formulieren?

Ich hoffe, ihr wisst rat…vielen Dank
Carsten

Vielen Dank erstmal für die Mühe bereits.
Daran liegt es aber leider, leider nicht…das hatte ich mir auch gedacht, denn wenn ich statt 146 eine 5 eingebe (den wert gibt es auch), funktioniert es trotzdem nicht… zu blöd.
Es muß irgendwie mit dem Format „d“ zusammenhängen
DateDiff(„d“,[test],[DiesJahrGeb]))=146).
Wie kann ich denn aus dem „d“ eine „normale Zahl“ machen (über Eigenschaften im Abfrageentwurf habe ich es schon versucht)?

Gruß+Danke
Carsten

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Vielen Dank erstmal für die Mühe bereits.
Daran liegt es aber leider, leider nicht…das hatte ich mir
auch gedacht, denn wenn ich statt 146 eine 5 eingebe (den wert
gibt es auch), funktioniert es trotzdem nicht… zu blöd.
Es muß irgendwie mit dem Format „d“ zusammenhängen
DateDiff(„d“,[test],[DiesJahrGeb]))=146).

**[DiesJahrGeb] IST KEIN DATUM!!!!!  
DateDiff will da aber eines!!!!!**  

Wenn Dein Feld DiesJahrGeb kein Datum ist, dann mache daraus eines (dazu gibt es die Funktion DatWert).
Zum Bleistift DatWert(„23.02.“&Jahr(Datum()) liefert Dir den 23.Februar 2000 als DATUM. Dieses kannst Du dann in der DatDiff wieder verwenden.
Gruß kw

Lösung
Hi Carsten,

aus meiner Sicht garnicht so einfach. Hier meine Lösung.
Sieht kompliziert aus, funktioniert aber.

Habe Tabelle Adressen erzeugt aber nur mit Name und Geburtstag.

Folgende SQL Abfrage zeigt Dir Name, Geburtstag + jetzt kommts,
das nächste Vorkommen des Geburtstages. D.h. heute ist der 7.8.00, dann kommt der 14.7.1972 erst wieder am 14.7.2001 vor!

SELECT Adressen.Name, Adressen.Geburtstag, DateSerial(DatePart(„yyyy“,[Adressen]![Geburtstag])+(DatePart(„yyyy“,Date())-DatePart(„yyyy“,[Adressen]![Geburtstag]))+IIf(DateSerial(CStr(DatePart(„yyyy“,Date())),CStr(DatePart(„m“,[Adressen]![Geburtstag])),CStr(DatePart(„d“,[Adressen]![Geburtstag])))

Vielen Dank an Heinerich, msiml und Alex.
Ich probier’s mal aus…werden die nuss schon knacken…
Gruß
Carsten

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]