Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Steckdose am Juli 20, 2010, 06:51:25

Titel: Wenn-Funktion --> Datum
Beitrag von: Steckdose am Juli 20, 2010, 06:51:25
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?
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: oma am Juli 20, 2010, 15:12:06
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am Juli 20, 2010, 23:17:50
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: oma am Juli 20, 2010, 23:30:08
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am Juli 20, 2010, 23:38:52
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.
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: oma am Juli 21, 2010, 00:36:33
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am Juli 22, 2010, 02:11:11
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!!
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: oma am Juli 22, 2010, 13:29:33
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am Juli 22, 2010, 23:34:45
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!!
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: oma am Juli 23, 2010, 12:03:20
Hallo,

berechnetes Feld in Abfrage als Datumsfeld formatieren sollte reichen.

Gruß Oma

[Anhang gelöscht durch Administrator]
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am Juli 27, 2010, 00:23:38
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: oma am Juli 27, 2010, 11:33:10
Hallo Steckdose,

mach mal

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


Gruß Oma
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am August 02, 2010, 05:05:46
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: oma am August 02, 2010, 13:14:28
Hallo,

schreibe mal:



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

Gruß Oma
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am August 04, 2010, 02:07:29
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!!
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: oma am August 04, 2010, 11:24:37
Hallo,

wahrscheinlich so:

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

Gruß Oma
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am August 05, 2010, 00:31:11
Ach, das "&" hat gefehlt!
Vielen Dank!!
Jetzt habe ich die Fehlermeldung nicht mehr, aber leider sind immer noch die "Datentypen im Kriterienausdruck unverträglich" :(
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: MzKlMu am August 05, 2010, 01:58:16
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am August 09, 2010, 00:03:59
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!
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: DF6GL am August 09, 2010, 08:24:31
Hallo,

am Besten postet Du den SQl-String der Abfrage für den Bericht und beschreibst die Datentypen der einzelnen Felder...


Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am August 10, 2010, 01:06:26
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ß
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: DF6GL am August 10, 2010, 12:19:48
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.
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am August 11, 2010, 02:14:44
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
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: DF6GL am August 11, 2010, 09:15:59
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,...
Titel: Re: Wenn-Funktion --> Datum
Beitrag von: Steckdose am August 11, 2010, 23:23:06
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