"komprimieren und reparieren" zerschießt Abfrage

Flo89

Rear Admiral
Registriert
Mai 2007
Beiträge
5.643
Habe gerade ein seltsames, aber reproduzierbares Problem mit einer Abfrage in einer Access 2010 Datenbank.

Ich bastle gerade an einer Funktion in einer Abfrage. Der letzte dauerhaft funktionierende Schritt sieht wie folgt aus:
Code:
ZR: [Mahlzeiten].[Datum]+([Uhrzeit]-0)
Bewirkt einfach, dass in dieser Spalte dann Datum und Uhrzeit kombiniert angezeigt werden.

Jetzt möchte ich von dieser Zeitangabe 6 Stunden abziehen:
Code:
ZR: [Mahlzeiten].[Datum]+([Uhrzeit]-#06:00:00#)
Das funktioniert dauerhaft. Soll heißen, auch wenn ich die Datenbank speichere, schließe und neu öffne funktioniert es.

Nachdem ich die Funktion "Datenbank komprimieren und reparieren" verwende, erhalte ich beim Versuch diese Abfrage zu öffnen allerdings die Fehlermeldung:
Microsoft Access schrieb:
Syntaxfehler (fehlender Operator) in Abfrageausdruck '00:00#)'.

An dem Punkt komme ich einfach nicht weiter.

Ob ich das Problem löse oder umgehe ist mir eigentlich egal^^


Hintergrundinfo zum eigentlichen Problem:
Bei der Datenbank handelt es sich um ein Ernährungstagebuch. Die Nährwerte der Mahlzeiten welche zwischen 0 Uhr und 5:59 Uhr eingenommen wurden sollen in der Abfrage zum Vortag gezählt werden. Mit der minus-sechs-Stunden-Rechnung arbeite ich gerade irgendwie auf eine Lösung hin.
Idee: Anschließend das Datum extrahieren und gruppieren lassen.
Mit "Jahr(x)" kann man ja das Jahr extrahieren, das würde ich dann wohl mit "Monat(x)" und "Tag(x)" kombinieren^^
Komme aber eben durch den Access-Fehler nicht weiter...

Die 'Standardlösung' einfach Access die Tage gruppieren zu lassen funktionert (so weit ich durchblicke) leider nur für 0 Uhr bis 23:59:59 Uhr, aber nicht wie gewünscht für 6 Uhr bis 5:59:59 Uhr des Folgetages. Oder etwa doch? :)
 
Zuletzt bearbeitet:
Moin,

spontan fällt mir da ein ...
  • Warum die Klammern um die beiden Zeitbegriffe?
  • Funktion DatAdd
  • Funktion ZeitSeriell
  • Funktion ZeitSeriellStr
Das Ergebnis sollte dann natürlich ein Datum sein, welches (im Zweifel) auch am Vortag liegt. DANACH solltest du dann auch gruppieren können.
 
Erstmal Danke für die Denkanstöße.

Die Klammern bewirken, dass das Ergebnis als Datum/Uhrzeit formatiert ist. Ohne Klammern werden die Werte als Dezimalzahl dargestellt, also "41646,5833333333" anstatt "07.01.2014 14:00:00".

Wenn ich die Klammern testweise weglasse bleibt das Problem bestehen. Nach dem komprimieren und reparieren lässt sich die Abfrage nicht mehr öffnen, auch nicht in der Entwurfsansicht.


Wie auch immer, "DatAdd" macht genau das was ich möchte. Danke!

Lediglich mit der Syntax hatte ich eben eine Weile zu kämpfen. In der deutschen Access-Version trennt man die Argumente natürlich mit Semikola und nicht mit Kommata^^


Die Funktion sieht jetzt so aus:
Code:
Esstag: Int(DatAdd("h";-6;[Mahlzeiten].[Datum]+[Uhrzeit]))
[Mahlzeiten].[Datum]+[Uhrzeit]​
steht für die Zeitpunkte, an denen gegessen wurde.

(DatAdd("h";-6; ... )​
zieht von dieser Zeitangabe 6 Stunden ab, um Nach-Mitternacht-Essen zum eigentlich Tag zu zählen.

Int(...)​
schneidet einfach die Uhrzeit ab, damit die Abfrage nach Datum gruppiert werden kann.


Vielleicht nutzen diese Informationen ja mal noch jemandem.

Vielen Dank nochmal :)
 
Zurück
Oben