Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Samurai2_de am April 23, 2016, 19:33:42

Titel: Bestimmten Uhrzeitwert per dlookup abfragen und in Textfeld ausgeben
Beitrag von: Samurai2_de am April 23, 2016, 19:33:42
Hallo ihr Wissenden!

Mir bereitet gerade ein Formular in meiner Datenbank Kopfzerbrechen.
In dem Formular gibt es ein Feld "Datum", über das per Dropdown ein Datum gewählt werden kann, das aus einer anderen Tabelle ("tab_Kalender") abgefragt wird. Nachdem dies geschehen ist soll in dem Textfeld "Uhrzeit1" eine in einer anderen Tabelle ("tab_Zeitraum") hinterlegte Uhrzeit ausgegeben werden.
In dieser Tabelle existieren unter anderem die Felder "Uhrzeit_Beginn", "Zeitraum_Beginn" und "Zeitraum_Ende". In den Felder Zeitraum_Beginn und Zeitraum_Ende wurde zuvor das Start- bzw. Enddatum eines mehrtägigen Zeitraums festgelegt.
In dem Textfeld "Uhrzeit1" soll also die Uhrzeit ausgegeben werden, die für das ausgewählte Datum gilt, welches zwischen dem Datum für "Zeitraum_Beginn" und "Zeitraum_Ende" liegt. Ich hoffe, soweit ist das noch klar...

Mein Code sieht bislang so aus:
Dim i As Date
i = Me!Datum.Column(0)
Me!Uhrzeit1 = DLookup(Uhrzeit_Beginn, tab_zeitraum, i >= Zeitraum_Beginn And i <= Zeitraum_Ende)


Leider bekomme ich so immer kein Ergebnis, das Textfeld bleibt mit "#Name?" beschrieben.

Kann mir bitte jemand von euch mitteilen, wo der Fehler in meinem Code liegt bzw. einen verbesserten Code posten?

Für eure Hilfe wäre ich euch sehr dankbar!

Mit freundlichem Gruß

Samurai2_de
Titel: Re: Bestimmten Uhrzeitwert per dlookup abfragen und in Textfeld ausgeben
Beitrag von: MaggieMay am April 23, 2016, 22:13:47
Hallo,

du hast die Syntaxregeln der Domänen-Funktionen nicht beachtet.

So wäre es formal korrekt:
Me!Uhrzeit1 = DLookUp("Uhrzeit_Beginn", "tab_zeitraum", i & " >= Zeitraum_Beginn And " & i & "<= Zeitraum_Ende")

Allerdings müssen Datumswerte in SQL-Abfragen speziell formatiert werden, so dass du mit dieser Variante evtl. eher zum Ziel kommst:
Me!Uhrzeit1 = DLookUp("Uhrzeit_Beginn", "tab_zeitraum", Format(Me!Datum.Column(0), "\#yyyy\/mm\/dd#") & " BETWEEN Zeitraum_Beginn And Zeitraum_Ende")
Titel: Re: Bestimmten Uhrzeitwert per dlookup abfragen und in Textfeld ausgeben
Beitrag von: Samurai2_de am April 23, 2016, 22:55:46
Vielen herzlichen Dank für die Antwort!
Ich habe beide Varianten probiert, leider bekomme ich beide Male kein Ergebnis. In dem Textfeld steht noch immer "#Name?".
Ich habe den Code für die Ereignisprozedure auf das Ereignis "Nach Aktualisierung" für das Feld "Datum" gelegt. Das ist doch an dieser Stelle richtig, oder habe ich da einen Denkfehler? (Testweise habe ich es auf "Nach Aktualisierung" für das Formular gelegt, leider auch hier keine Änderung)

Wenn ich eine Überwachung im VBA-Editor hinzufüge, meldet diese bei "Wert": "Außerhalb des Kontexts"...?

Ich befürchte, ich sehe gerade den Wald vor lauter Bäumen nicht...

Gruß

Samurai2_de
Titel: Re: Bestimmten Uhrzeitwert per dlookup abfragen und in Textfeld ausgeben
Beitrag von: MaggieMay am April 23, 2016, 23:28:18
Hi,

Zitatüber das per Dropdown ein Datum gewählt werden kann, das aus einer anderen Tabelle ("tab_Kalender") abgefragt wird

wie sieht denn die Datensatzherkunft (-> SQL-Code) des Kombifeldes aus?
Titel: Re: Bestimmten Uhrzeitwert per dlookup abfragen und in Textfeld ausgeben
Beitrag von: Samurai2_de am April 23, 2016, 23:44:36
SELECT tab_Kalender.DatumTage
FROM tab_Kalender
ORDER BY tab_Kalender.[DatumTage];
Titel: Re: Bestimmten Uhrzeitwert per dlookup abfragen und in Textfeld ausgeben
Beitrag von: DF6GL am April 24, 2016, 09:04:23
Hallo,



die Datum-Formatierung sollte so aussehen:


ZitatMe!Uhrzeit1 = DLookUp("Uhrzeit_Beginn", "tab_zeitraum", Format(cDate(Me!Datum.Column(0)), "\#yyyy-mm-dd\#") & " BETWEEN Zeitraum_Beginn And Zeitraum_Ende")
Titel: Re: Bestimmten Uhrzeitwert per dlookup abfragen und in Textfeld ausgeben
Beitrag von: Samurai2_de am April 24, 2016, 10:23:44
Zitat von: DF6GL am April 24, 2016, 09:04:23

ZitatMe!Uhrzeit1 = DLookUp("Uhrzeit_Beginn", "tab_zeitraum", Format(cDate(Me!Datum.Column(0)), "\#yyyy-mm-dd\#") & " BETWEEN Zeitraum_Beginn And Zeitraum_Ende")

Das war's, jetzt funktioniert es endlich! Vielen herzlichen Dank!

Gruß

Samurai2_de