Neuigkeiten:

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

Mobiles Hauptmenü

Wenn-Funktion --> Datum

Begonnen von Steckdose, Juli 20, 2010, 06:51:25

⏪ vorheriges - nächstes ⏩

Steckdose

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?

oma

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
nichts ist fertig!

Steckdose

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

oma

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
nichts ist fertig!

Steckdose

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.

oma

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
nichts ist fertig!

Steckdose

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!!

oma

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
nichts ist fertig!

Steckdose

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!!

oma

#9
Hallo,

berechnetes Feld in Abfrage als Datumsfeld formatieren sollte reichen.

Gruß Oma

[Anhang gelöscht durch Administrator]
nichts ist fertig!

Steckdose

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

oma

#11
Hallo Steckdose,

mach mal

SELECT Year([Warrantyexpires]) AS Jahr FROM WarrantyQry
WHERE (((WarrantyQry.Warranty) Is Not Null))
GROUP BY Year([Warrantyexpires])


Gruß Oma
nichts ist fertig!

Steckdose

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

oma

Hallo,

schreibe mal:



DoCmd.OpenReport "Warranty", acViewPreview, , "Year([Warrantyexpires])='" & Me!cmbYearW &"'"  _
             " AND Month([Warrantyexpires])='" & Me!cmbMonthW &"'"

Gruß Oma
nichts ist fertig!

Steckdose

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!!