He Accessler!
Ich habe folgendes Problem in meiner Abfrage:
Um ein Datum zu berechnen geb ich folgendes ins Feld ein: Warrantyexpires: Wenn(IstNull([Warranty]);"";DatAdd("jjjj";Nz([Warranty]);[InstallationDate]))
Über die WennFkt will ich verhindern, dass Access mir auch dann ein Datum berechnet, wenn das Warranty-Feld leer ist. Leider gibt er mir jetzt aber das berechnete Datum nicht mehr im Format Datum aus. Es sieht zwar so aus, aber für einen Bericht wollte ich per SQL-Anweisung das Jahr selektieren und das ist nicht möglich. Fehlermeldung ist dann: Datentypen sind in Kriterienausdruck unverträglich.
Wie bekomme ich das hin, dass das berechnete Datum auch wirklich ein Datum ist?
Hallo Steckdose,
bist du sicher, dass DatAdd("jjjj";Nz([DatAdd("jjjj";Nz([Warranty]);[InstallationDate])) funktioniert, wenn Warranty=Null ist
Ohne zu probieren, denke ich , dass das nicht funktioniert
Oma
Hallo Oma
Hm, also die Berechnung funktioniert soweit. Wenn das Warrantyfeld leer ist möchte ich keine Berechnung haben und das klappt soweit. Wenn ich eine 0 eingebe erhalte ich als Ergebnis wieder das Installationsdatum.
Magst du mir kurz erklären, warum du denkst das es nicht geht?
Steckdose
Hallo,
also bei mir funktioniert das nicht, wenn bei Datum=Null das Installationsdate erscheinen soll, so kannst du doch einfach schreiben:
Warrantyexpires: Wenn(IstNull([Warranty]);""; [InstallationDate])
Gruß Oma
Aber dann habe ich ja keine Berechnung mehr, wenn Warranty eben nicht Null ist?
Oder steh ich da grad irgendwie auf dem Schlauch?
Mein Ziel ist es, bei leerem Warrantyfeld kein Datum berechnet zu bekommen und sobald ich eine Zahl von 0-n eingebe eben ein berechnetes Datum, wann die Garantie abläuft.
Das Problem ist jetzt nur, das ich später über SQL-Anweisung Jahr und Monat aus diesem berechnetem Datum extrahiert haben möchte und das funktioniert nicht. Meiner Meinung nach, weil Access dieses berechnete Datum eben nicht als Datum erkennt.
Hallo,
ja sorry, ich habe gedacht Warranty ist ein Datumsfeld, dann funktioniert die sache nicht!
wenn Warranty ein Zahlenfeld ist könntest du schreiben
Warrantyexpires: Wenn(IstNull([Warranty]);"";ZDate(DatAdd("jjjj";NZ([Warranty]);[InstallationDate])))
so erstellst du aus dem berechneten String ein Datumsfeld
Gruß Oma
Hallo Oma!
Vielen Dank für den Code, leider erkennt Access das Feld immer noch als Textfeld...
Ja, Warranty ist ein Zahlenfeld (Long Integer) und InstallationDate ein Datumsfeld (Datum, kurz). Beide Werte stammen aus der gleichen Tabelle.
Die Abfrage basiert aber auf insgesamt drei Tabellen (falls da irgendwo das Problem liegen könnte?)
Wenn ich die Wenn Fkt. weglasse erkennt Access das berechnete Feld auch wieder als Datumsfeld. Muss man das vielleicht bei Datumsberechnungen anders lösen?
Danke für die Mühe!!
Hallo,
ja das bleibt ein Textfeld :(
Auch : Warrantyexpires: ZDate(Wenn(IstNull([Zahlfeld]);"";DatAdd("yyyy";NZ([Zahlfeld]);[datumZusatz]))) geht nicht, da
dem Feld nicht ein Datum oder ein String zugewiesen werden kann!
Kann nicht statt "" irgendein Datum zugewiesen werden?
Gruß Oma
Hey,
einfach ein Datum zuweisen ist eher schlecht.
Denn der Anwender sieht ja nachher nur die Berichte und denkt dann, die Garantie wäre schon (oder noch nicht) abgelaufen, obwohl das eben ne falsche Aussgae ist.
Normalerweise sollte die Garantiedauer ja auch gar nicht leer sein, aber da sie von Kunde zu Kunde variieren kann, kann es eben sein, dass sie erst später eingetragen wird. Und für diesen Zeitraum sollen eben nach Möglichkeit keine Verwechslungen bezüglich des Ablaufdatums auftreten.
Meinst du denn, das Problem wäre nur zu lösen, wenn ich ein anderes Datum statt "" eingebe? Oder ich lass eben die ganze Wenn-Fkt weg und habe dann als Ergebnis das Installationsdatum. Obwohl mich das auch nicht ganz glücklich macht ;)
Besten Dank nochmals!!
Hallo,
berechnetes Feld in Abfrage als Datumsfeld formatieren sollte reichen.
Gruß Oma
[Anhang gelöscht durch Administrator]
He Oma!
Vielen Dank, er erkennt es jetzt als Datumsfeld... Da hätt ich auch selber drauf kommen können, aber vielen Dank für den Hinweis!
Leider kann meine SQL-Anweisung immer noch nicht Jahr und Monat auslesen. (Immer noch: Datentypen in Kriterienausdruck unverträglich)
So siehte meine Anweisung aus, ich habe sie für ein ungebundenes Kombifeld in Datensatzherkunft eingegeben:
SELECT Year([Warrantyexpires]) FROM [WarrantyQry] Group by Year(Warrantyexpires) ORDER BY Year(Warrantyexpires)
Stimmt irgendwas an der Anweisung nicht, oder warum klappt das immer noch nicht?
Gruß, Steckdose
Hallo Steckdose,
mach mal
SELECT Year([Warrantyexpires]) AS Jahr FROM WarrantyQry
WHERE (((WarrantyQry.Warranty) Is Not Null))
GROUP BY Year([Warrantyexpires])
Gruß Oma
Hey Oma!
Das funktioniert nun wunderbar, ganz vielen Dank!
Leider werd ich aber die Fehlermeldung immer noch nicht so ganz los...
Jetzt tritt der Fehler "Datentypen in Kriterienausdruck unverträglich" auf, wenn ich den gefilterten Bericht öffnen möchte.
Dazu gebe ich folgenden Code beim Klicken einer Schlatfläche ein:
On Error GoTo Err_OpenSelW_Click
DoCmd.OpenReport "Warranty", acViewPreview, , "Year([Warrantyexpires])=" & Me!cmbYearW & _
" AND Month([Warrantyexpires])=" & Me!cmbMonthW
Exit_OpenSelW_Click:
Exit Sub
Err_OpenSelW_Click:
MsgBox Err.Description
Hallo,
schreibe mal:
DoCmd.OpenReport "Warranty", acViewPreview, , "Year([Warrantyexpires])='" & Me!cmbYearW &"'" _
" AND Month([Warrantyexpires])='" & Me!cmbMonthW &"'"
Gruß Oma
Hier erhalte ich dann die Fehlermeldung, das eein Anweisungsende erwartet wird.
Nach ein wenig rumprobieren mit den Anführungszeichen und Hochkommata hat sich aber leider kein Erfolg eingestellt. Entdeckst du auf die Schnelle irgendeinen Fehler?
Vielen Dank!!
Hallo,
wahrscheinlich so:
DoCmd.OpenReport "Warranty", acViewPreview, , "Year([Warrantyexpires])='" & Me!cmbYearW & "'" & _
" AND Month([Warrantyexpires])='" & Me!cmbMonthW & "'"
Gruß Oma
Ach, das "&" hat gefehlt!
Vielen Dank!!
Jetzt habe ich die Fehlermeldung nicht mehr, aber leider sind immer noch die "Datentypen im Kriterienausdruck unverträglich" :(
Hallo,
Year und Month liefert doch Integerzahlen. Dann sollten die Hochkomma weg.
DoCmd.OpenReport "Warranty", acViewPreview, , "Year([Warrantyexpires])=" & Me!cmbYearW & _
" AND Month([Warrantyexpires])=" & Me!cmbMonthW
Dank auch an dich, MzKlMu!
Leider bleibt die Fehlermeldung ("Datentypen in Kriterienausdruck unverträglich") immer noch bestehen.
Kann es damit zusammenhängen, das ich den Bericht schon vor der Änderung des Formats in der Abfrage erstellt habe oder so?
Danke für eure Unterstützung!
Hallo,
am Besten postet Du den SQl-String der Abfrage für den Bericht und beschreibst die Datentypen der einzelnen Felder...
Hey!
SQL-String ist folgender:
SELECT Equipment.SerialNo, Site.SiteStreet, Site.SiteSuburb, Site.InstallationDate, IIf(IsNull([Warranty]),"",CDate(DateAdd("yyyy",NZ([Warranty]),[InstallationDate]))) AS Warrantyexpires, Site.Warranty, Owner.OwnerForename, Owner.OwnerSurname, Owner.OwnerPhone
FROM (Owner RIGHT JOIN Site ON Owner.OwnerID = Site.Owner) LEFT JOIN Equipment ON Site.SiteID = Equipment.Site;
Das Feld Warrantyexpires in der Abfrage habe ich als Datumsfeld formatiert ("tt\.mm\.jjjj" in Format)
Danke und lieben Gruß
Hallo,
ZitatDas Feld Warrantyexpires in der Abfrage habe ich als Datumsfeld formatiert ("tt\.mm\.jjjj" in Format)
genau das lass mal bleiben und entferne diese Formatangabe.
Hey,
nur stehe ich dann ja wieder vor dem Problem, dass ich ganz am Anfang in diesem Thread hatte: Access erkennt mein berechnetes Datum nicht als Datum und gibt es als Textfeld aus. Dann kann ich wiederum Jahr und Monat nicht auslesen und eben meinen Bericht nicht danach filtern lassen.
Wenn ich die "Wenn-Fkt." im berechneten Datum weglasse funktioniert es, aber das würde ich eben nur sehr ungern machen.
Lieben Gruß,
eine leicht verzweifelte Steckdose
Hallo,
ersetze zusätzlich den Leerstring in der IIF-Bedingung durch einen gültigen Datumsausdruck, z.B:
IIf(IsNull([Warranty]),#00/00/0000#,...
evtl geht auch:
IIf(IsNull([Warranty]),Null,...
Hey!
Super, allerbesten Dank! Habe deinen unteren Ausdruck benutzt und jetzt klappt alles so, wie ich es mir vorgestellt habe!
Vielen Dank an alle die mir hier mit Tipps und Tricks zur Seite standen!
Sonnige Grüße,
die Steckdose