Neuigkeiten:

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

Mobiles Hauptmenü

Iif abfrage mit Datum und Anzahl Monate

Begonnen von nimora, August 27, 2019, 16:09:42

⏪ vorheriges - nächstes ⏩

nimora

Hi, ich habe aus einer Datediff funktion die anzahl der Monate ausgegeben und möchte dies Monate nun mit einer Zahl vergleichen. Aber der qury editor schreidet mir die Formel ab.

Sonderurlaub1: (IIf([Zugehörigkeit]>Month(12),1,0))

am Ende wir immer das ",0" gelöscht und dadurch wird immer 1 im Ergebnis angezeigt. (Sonderurlaub1: (IIf([Zugehörigkeit]>Month(12),1)))

Wo liegt mein Fehler?

Besten Dank

DF6GL

Hallo,

ZitatWo liegt mein Fehler?

zumindest hier :  Month(12)

Welchen Sinn hat dieser Ausdruck?



Wie heißt der Ausdruck, um die Anzahl Monate zu berechnen?

Welche Sprach-und Access-Version verwendest Du?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

Hallo,
das war doch schon mal Thema.
https://www.access-o-mania.de/forum/index.php?topic=23990.msg141447#msg141447
Blieb damals unbeantwortet.

PS:
Month(12) = 1
Gruß Klaus

nimora

sorry, es stimmt. ich hatte schon mal danach gefragt, es dann aber wieder aus den Augen verlohren. PhilS hatte damals zuletzt darauf verwiesen, dass die Trenner für die Funktionsargumente in der Entwurfsansicht ein Semikolon sein müssen. Das hatte ich getestet, hat aber leider keine Lösung gebracht. Auch in diesem Beispiel ergibt es "invalid syntax"

@DF6GL
nun, wenn ich einfach mit 12 arbeite, erzeugt dies ebenfalls einen syntax Fehler. Das Ergebnis von DataDiff bleibt doch ein Datum oder? und Ich dachte dass deswegen ein Vergleich mit der Zahl 12 nicht möglich ist. Wie man sieht, ist das falsch gedacht.

Aber vielleicht dann die Grundsätzliche Frage. Ich will einfach aus dem aktuellem Datum und dem Anfangsdatum errechnen, ob jemand über 12 Monate im Unternehmen ist und in Abhängigkeit davon einen Wert vergeben. Ist mein Ansatz denn da gänzlich falsch?

Ich verwende Office 365, sprach ist English.

VG

MzKlMu

Hallo,
zeige mal die funktionierende Formel mit der Du die Monate berechnest.
Gruß Klaus

PhilS

(Zitat umgestellt zur Verdeutlichung des logischen Zusammenhangs)
Zitat von: nimora am August 28, 2019, 08:40:34PhilS hatte damals zuletzt darauf verwiesen, dass die Trenner für die Funktionsargumente in der Entwurfsansicht ein Semikolon sein müssen.[...]Ich verwende Office 365, sprach ist English.
Meine Aussage basierte auf der Annahme, dass du deutsche Windows-Regionseinstellungen verwendest.  Der Trenner für Funktionsargumente entspricht dem "List separator" des Betriebssystems aus den Regionseinstellungen. Mit deutschen Einstellungen ist das per Default das Semikolon, mit englischen Einstellungen ist das per Default das Komma.

Zitat von: nimora am August 28, 2019, 08:40:34Das Ergebnis von DataDiff bleibt doch ein Datum oder?
Nein. Das Ergebnis von DateDiff ist eine Zahl. - Das kann man einfach in der Dokumentation nachlesen oder ausprobieren.

? datediff("m",#08/01/2018#,date)
12

Ich wüsste auch generell nicht, wie ein Datum das Eregbnis der Dífferenz zwischen zwei Datumswerten sein sollte.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

nimora

Danke für die Antworten.

@MzKIMu
Sonderurlaub: (DateDiff("m",[Einstelldatum],Now()))


@PhilS
Danke für dein Feedback. Ich kann auch verstehen, dass für den Profi viele Handlungen und Annahmen der Amateure nicht verständlich sind. Dennoch ist das hier doch aber ein Hilfe-Forum. Wenn ich mir alle Dokus zum Thema durchlesen könnte, bräuchte ich bestimmt nicht so viele Fragen zu stellen, aber diese Möglichkeit/Zeit habe ich nicht. Daher nutze ich ja ein solches Forum.

Eine gewisse Form von Sarkasmus und einen als "dumm" darzustellen, halte ich deshalb für nicht angebracht. Es gibt immer Menschen, die mehr oder eben weniger wissen als andere.

Ich schätze eure Hilfe sehr, aber dass ein Amateur Fragen falsch stellt, oder falsche Grundannahmen hat, ist vielleicht nicht total absurd.

VG

DF6GL

Hallo,

ZitatWenn ich mir alle Dokus zum Thema durchlesen könnte

Du brauchst Dir nicht alle Dokus durchlesen...

Du brauchst nur (im VBA-Editor) die Schreibmarke auf die Funktion (Datediff) stellen und F1 drücken, dann erhältst Du (in den meisten Fällen) erklärende Hilfe..

Wenn ich mir den Aufwand und die Zeit ansehe, die dieser Thread Dir (und anderen ) gekostet hat, dann wäre das Problem durch Drücken von F1 10 mal schneller gelöst worden.

Ein paar Grundkenntnisse sind natürlich und zudem trotzdem erforderlich..  ;)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

nimora

ach mensch, natürlich versuche ich zuvor das Problem allein zu lösen in dem ich eben doch in der doku lese und stöbere und ausprobiere. Aber da sind in der regel nur standardfälle dargestellt. es ist nicht so, dass bei jedem hindernis meine erster schritt ist, ins forum zu schreiben. Aber man kommt schon heufig nicht mal auf die richtige frage oder weiss nicht, wie man das problem benennen soll. Schon dadurch scheitert es, dass man alleine zum ziel kommt.

Das mit F1 im editor wusste ich z.B. noch nicht, aber ist ist eben eine richtige Hilfe und nicht sich über den fragenden lustig zu machen. Ich habe eine Mitarbeiterverwaltung ohne viel Vorwissen aufgebaut und meistens funktioniert diese, aber manche sachen bekomme ich eben nicht hin und ich will auch nicht bestreiten, dass man da manchmal ein Brett vorm kopf hat.

Wenn überhaupt noch möglich, würde ich gerne noch was zum Thema schreiben.

Die Doku gibt für das iif statement eine ganz banale form raus, die ich ja auch befolge, nur bekomme ich eben bei:
Sonderurlaub1: (Iif([Zugehörigkeit]>12,1,0)) "The expression you entered has an invalid number" und markiert dann 12,1,0. :(

MzKlMu

#9
Hallo,
so klappt es:
SELECT Einstelldatum, DateDiff("m",[Einstelldatum],Date()) AS Zugehörigkeit,
IIf(DateDiff("m",[Einstelldatum],Date())>12,1,0) AS Sonderurlaub
FROM DeineTabelle
Das ist der SQL Text, den Du auch in einem englischen Access exakt so verwenden kannst.
Da das Feld Zugehörigkeit berechnet ist, kann es in der weiteren Formel nicht verwendet werden.
Der DateDiff Ausdruck muss daher wiederholt werden.
Statt Now() solltest Du Date() verwenden, Now beinhaltet auch die Uhrzeit die hier aber nicht relevant ist.

Hatte ich Dir alles in meiner 1. Antwort (#1) in Deinem anderen (gleichen) Thema schon mal geschrieben, hast Du das überlesen ?
Gruß Klaus

PhilS

Zitat von: nimora am August 28, 2019, 14:02:37
Das mit F1 im editor wusste ich z.B. noch nicht, aber ist ist eben eine richtige Hilfe und nicht sich über den fragenden lustig zu machen.
Ich habe nicht die Absicht irgendjemanden als ,,dumm" darzustellen oder mich über Fragen lustig zu machen.

In manchen Fällen ist es für mich (und ich denke, für ,,Fortgeschrittene" im Allgemeinen) schwer nachzuvollziehen, warum ,,Anfänger" eine Frage stellen, die sich mit einem Blick in die Dokumentation ([F1] oder Eingabe von ,,Access DateDiff" in eine beliebige Suchmaschine) in weniger Zeit beantworten ließe, als es dauert, dies hier zu fragen.
– Nebenbei, den kompletten Inhalt dieses Threads, sowohl zu Komma vs. Semikolon und den Regionseinstellungen, zum Rückgabe-Datentyp von DateDiff als auch der übergeordneten Problemstellung hatten wir Anfang Mai schon mal behandelt.

Aber nun zu deinem konkreten Problem. Die eigentliche Frage sollte mit der Antwort von @MzKlMu bereits beantwortet sein.

Ich denke, es würde dir darüber hinaus auch helfen, wenn wir mal eindeutig klären, was denn nun der korrekte Trenner für Funktionsargumente auf deinem System ist.
Öffne noch mal eine beliebige (funktionierende!) Auswahlabfrage im Entwurf. Dann füge dort als neue Spalte den folgenden Ausdruck ein (Copy&Paste ohne Änderungen bitte):
Test: Iif(13>12,1,0)
Kommt direkt beim Verlassen des Eingabefeldes oder beim Ausführen der Abfrage der "The expression you entered has an invalid number"-Fehler? Wenn ja, ist der Trenner auf deinem System höchstwahrscheinlich das Semikolon. (Wenn sich die Abfrage ausführen lässt und sich eine zusätzliche Spalte Test mit dem Wert 1 in den Ergebnissen, ist der Trenner das Komma)

Gegenprobe; ersetze den Ausdruck durch:
Test: Iif(13>12;1;0)
Hast du jetzt eine zusätzliche Spalte Test mit dem Wert 1 in den Ergebnissen? Wenn ja, ist der Trenner auf deinem System absolut sicher das Semikolon.

Wie bereits erwähnt, hängt dies von den Regionseinstellungen des Rechners und des Windows-Benutzers ab. – Dies entspricht nicht unbedingt der Sprache der Office-Installation oder des Betriebssystems. Wenn du verschiedene Rechner oder Windows-Benutzeraccounts verwendest, kann das für jeden Rechner/Benutzer anders sein.



Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

Hallo,
der von mir in #9 vorgeschlagene SQL Text ist Versions und Sprachunabhängig.
Kopiere das mal in die SQL Sicht einer Abfrage und wechsle dann zur Entwurfsansicht.
Die Trenner (Komma oder Semikolon) werden automatisch übersetzt, dann siehst Du auch, welche Trenner Du verwenden musst.
Gruß Klaus

nimora

besten Dank für das offene Feedback, trotz Kritik.

Also:
@PhilS
Wenn ich
Test: Iif(13>12,1,0) einfüge, kommt:
"The expression you entered has an invalid number"
wenn ich
Test: Iif(13>12;1;0) einfüge, kommt:
"The expression you entered has an invalid syntax. you omitted an operand or operator, you entered an invalid character or comma, or you entered text without surrounding it in quotation marks."

@MzKIMu
funktioniert, wenngleich ich mich frage warum. Warum werden hier Kommata akzeptiert, in der einfachen Funktion von PhilS nicht. Sowas bringt einen nicht Profi zum Verzweifeln.
Wenn ich dort dann, nur zum testen folgendes einfüge:
Sonderurlaub1: (IIf([Zugehörigkeit]>12,1,0))
gibt es wieder den bekannten Fehler.
Urspünglich hatte ich das auch alles in einer Zeile, wie MzKIMu es geschrieben hatte.
Sonderurlaub: IIf(DateDiff("m",[Einstelldatum],Date())>12,1,0)
Da habe ich aber auch die Fehlermeldung bekommen und habe es deshalb getrennt, um so den Fehler besser suchen zu können.

Auch wenn das eigentliche Problem gelöst zu sein scheint, würde ich doch schon gerne noch wissen, warum das mal klappt und mal nicht bzw. wo der Unterschied liegt.

VG

MzKlMu

#13
Hallo,
Sonderurlaub1: (IIf([Zugehörigkeit]>12,1,0))
Warum probierst Du das immer wieder, das geht grundsätzlich nicht. Du kannst hier keinen berechneten Wert (Zugehörigkeit) verwenden.
Zitat... würde ich doch schon gerne noch wissen, ....
Siehe meine Antwort in #11.
Und bitte mal in die Entwurfsansicht wechseln.
Das Trennzeichen das dann erscheint ist das Richtige.
SQL verwendet immer Kommas, egal welche Version.
Auch in VBA sind immer Kommas zu verwenden.
Der Durcheinander beginnt mit den nicht immer sinnvollen Sprach und Regionalversionen und den damit einhergehenden Regionaleinstellungen wenn man in die Entwurfseinstellungen (Abfragen, Formulare, Berichte)  wechselt und damit arbeitet.
Gruß Klaus

PhilS

Zitat von: nimora am August 28, 2019, 18:34:05
wenn ich
Test: Iif(13>12;1;0) einfüge, kommt:
"The expression you entered has an invalid syntax. you omitted an operand or operator, you entered an invalid character or comma, or you entered text without surrounding it in quotation marks."
Das überrascht mich jetzt wirklich! Das deutet ein wenig darauf hin, dass bei dir weder Komma noch Semikolon der Trenner ist. - Das ist extrem ungewöhnlich, aber durchaus möglich. Letztendlich kann man manuell ein beliebiges Zeichen dort einstellen.

Ich würde empfehlen, du beachtest die Hinweise von @MzKlMu und versuchst seinen Ansatz, um herauszufinden, was denn nun wirklich der richtige Trenner ist.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor