Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

mal wieder expression has invalid number in Abfrage

Begonnen von nimora, Mai 02, 2019, 10:36:29

⏪ vorheriges - nächstes ⏩

nimora

Hallo,

ich möchte etwas vermeintlich simples in einer Abfrage gestatlten.

Als erstes wird die Zugehörigkeit berechnet:
Zugehoerigkeit: DateDiff("m",[Einstelldatum],Now())
als zweites soll ich Abhängigkeit von den Monaten ab 12 Monaten ein Tag Sonderurlaub berechnet werden. Hier scheitert es, warum auch immer:
Sonderurlaub: IFF([Zugehoerigkeit]>=12,1,0)

Fehlermeldung "The expression you entered has an invalid number.

Was ist denn das für ein Format, was aus der ersten Abfrage hervorgeht? und wie kann ich die Formate gleichschlaten?

Besten Dank

MzKlMu

Hallo,
berechnete Felder können im Regelfall nicht direkt verwendet werden.
Versuche es so:
Sonderurlaub: IFF(DateDiff("m",[Einstelldatum],Date())>=12,1,0)
Außerdem, verwende statt Now() lieber Date(). Now() beinhaltet auch die Uhrzeit, was hier nicht notwendig ist.
Gruß Klaus

nimora

Besten Dank für die schnelle Hilfe.

so hatte ich es, mit Ausnahme des Date(), auch schon versucht. Da da die Fehlermeldung kam, wollte ich es getrennt gestalten.

Erzeugt leider denselben fehler, wobei "12,1,0" dabei markiert werden.
Streiche ich das Feld Sonderurlaub, wird mit das Feld Zugehoerigkeit aber mit den korrekten Monaten angezeigt.

Ich sag ja, ist eigentlich was simples. :(

jens05

Hallo,
das sollte IIF heißen nicht IFF

SELECT *, IIf(DateDiff("m",[Einstelldatum],Date())>=12,1,0) AS Sonderurlaub
FROM TabName;

PhilS

Zitat von: nimora am Mai 02, 2019, 11:09:35
Erzeugt leider denselben fehler, wobei "12,1,0" dabei markiert werden.
Die Meldung "The expression you entered has an invalid number." trifft eigentlich genau den Punkt. Nur ist es nicht ganz einfach den Sinn zu verstehen.
Im grafischen Abfragedesigner müssen (bei Deutschen Sprach-/Ländereinstellungen) Semikolons zur Trennung der Argumente verwendet werden. Die Eingabe von "12,1,0" wird als eine Zahl interpretiert, die aber natürlich ungültig ist.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

nimora

danke an all.

@jens05: ja, habe ich natürlich so stehen.

@PhilS: "grafischen Abfragedesigner"? Kannst du das näher erläutern?

DateDiff spuckt welches Format aus? Für mich ersichtlich ist eine Zahl.

und ich habe ein englisches system. davon ab habe ich Semikolon schon getestet. Invalid syntax

DF6GL

Hallo,

poste mal den kompletten SQLString der Abfrage...


"grafischer Abfragedesigner"  ist das, was Du am Monitor zu sehen bekommst, wenn Du beispielsweise eine neue Abfrage erstellen willst...      --->   Abfrageentwurfsansicht

nimora

naja, den String zu posten klappt nicht so recht, da das durch die Fehlermeldung ja verhindert wird. Ohne das If-Statement sieht es so aus:
SELECT tblPersonal.PersonalID, tblPersonal.Einstelldatum, tblPersonal.Mitarbeiternummer, tblPersonal.AbteilungID, tblPersonal.Vorname, tblPersonal.Nachname, (((DateDiff("m",[Einstelldatum],Now()))*[Urlaubsanspruch])+2) AS [aktueller Urlaubsanspruch], tblPersonal.RestUrlaubVorjahr, DLookUp("[SumOfTageAbwesend]","qryUrlaubstage1","[PersonalID] =" & [PersonalID]) AS Urlaub, IIf([Urlaub] Is Null,[aktueller Urlaubsanspruch]+[RestUrlaubVorjahr],[aktueller Urlaubsanspruch]+[RestUrlaubVorjahr]-[Urlaub]) AS Urlaubsrueckstellung, DateDiff("m",[Einstelldatum],Date()) AS Zugehoerigkeit, [Zugehoerigkeit] AS Sonderurlaub
FROM tblPersonal
WHERE (((tblPersonal.Einstelldatum)<DateSerial(Year(Date()),Month(Date()),Day(Date())+1)) AND ((tblPersonal.Austrittsdatum)>#5/1/2019# Or (tblPersonal.Austrittsdatum) Is Null))
ORDER BY tblPersonal.Nachname;


und bei Sonderurlaub möchte ich erreichnen, wenn jemand 12 monate dabei ist, bekommt er einen Tag zusätzlich bis max. 6 Tage. Das ist zumindest das Ziel der if abfrage.

DF6GL

Hallo,

vermutlich sollte es so aussehen:


SELECT tblPersonal.PersonalID,
tblPersonal.Einstelldatum,
tblPersonal.Mitarbeiternummer,
tblPersonal.AbteilungID,
tblPersonal.Vorname,
tblPersonal.Nachname,
(((DateDiff("m",[Einstelldatum],Date()))*[Urlaubsanspruch])+2) AS [aktueller Urlaubsanspruch], tblPersonal.RestUrlaubVorjahr,
DLookUp("[SumOfTageAbwesend]","qryUrlaubstage1","[PersonalID] =" & [PersonalID]) AS Urlaub,

IIf([Urlaub] Is Null,[aktueller Urlaubsanspruch]+[RestUrlaubVorjahr],[aktueller Urlaubsanspruch]+[RestUrlaubVorjahr]-[Urlaub]) AS Urlaubsrueckstellung,

DateDiff("m",[Einstelldatum],Date()) AS Zugehoerigkeit,

IIF(DateDiff("m",[Einstelldatum],Date())>=12,1,0)   AS Sonderurlaub

FROM tblPersonal

WHERE (((tblPersonal.Einstelldatum)<DateSerial(Year(Date()),Month(Date()),Day(Date())+1)) AND ((tblPersonal.Austrittsdatum)>#5/1/2019# Or (tblPersonal.Austrittsdatum) Is Null))

ORDER BY tblPersonal.Nachname;

nimora

Guten Morgen und vielen Dank an DF6GL.

Wenn ich deine code zeilen in die Abfrage kopiere, und dann in den view mode gehen, funktioniert es. Sobald ich aber in der design view in der Zeile "IIf(DateDiff("m",[Einstelldatum],Date())>=12,1,0)" nur ein zeichen ändere (z.B. aus ">" ein "<" machen) oder auch eins lösche und dasselbe wieder eintrage, bekomme ich wieder die alte fehlermeldung.

Letzlich soll die if-Abfrage noch verschachtelt werden, was so aber wieder an dieser Fehlermeldung scheitert.

Hat noch einer ne Idee, warum das so ist?

DF6GL

Hallo,

evtl. gibt es ein Problem mit den Länder/Regions-Einstellungen. Oder die Office-Installation muss repariert werden.

Welche OS- und Access-Version verwendest Du?

PhilS

Zitat von: nimora am Mai 06, 2019, 07:38:26Sobald ich aber in der design view in der Zeile "IIf(DateDiff("m",[Einstelldatum],Date())>=12,1,0)" nur ein zeichen ändere (z.B. aus ">" ein "<" machen) oder auch eins lösche und dasselbe wieder eintrage, bekomme ich wieder die alte fehlermeldung.
Kann es sein, dass meine Anmerkung bzgl. Komma vs. Semikolon bei dir nicht angekommen ist?

In der SQL-Ansicht der Abfrage ist der obige Ausdruck korrekt.

In der Entwurfsansicht musst du aber anstelle der Kommas als Trenner der Funktionsargumente Semikolons verwenden.

Beim Wechsel zwischen den beiden Ansichten sollte Access das eigentlich automatisch ändern.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor