Hallo,
zu folgendem Problem finde ich leider keine Lösung....:-(
In einer Tabelle habe ich die Felder von(Datum) und bis(Datum).
In einem Formular möchte ich nun schauen, ob der Inhalt eines Textfeldes (txtDatum) innerhalb der Felder in der Tabelle liegt.
Ich würde gerne Dlookup verwenden, weiß aber nicht, wie der Syntax lauten müsste.
Sollte das nicht möglich sein, müsste ich die einzelnen Datumswerte in eine separate Tabelle schreiben, auch hier ist mir der richtige Weg nicht geläufig.
Kann hier jemand unterstützen?
Grüße
Andreas
Zitatweiß aber nicht, wie der Syntax lauten müsste
Bei einer qualifizierten Arbeitsweise würde man sein Unwissen mit Nachschlagen in der Hilfe reduzieren:
DLookup-Funktion (https://support.microsoft.com/de-de/office/dlookup-funktion-8896cb03-e31f-45d1-86db-bed10dca5937)
Beim dritten Argument (Kriterien) muss man sich merken, dass dort der WHERE-Teil einer SQL-Anweisung ohne das Schlüsselwort WHERE erwartet wird, und dies IMMER in englisch/amerikanischer Notation, auch wenn "vorne" DomWert statt DLookup und Semikolons statt Kommas verwendet werden.
Also sollte man sich in sein Hirn aufnehmen, wie ein korrektes Kriterium an sich aussehen sollte:
meinDatum BETWEEN von AND bis
von <= meinDatum AND bis >= meinDatum... oder vergleichbare Gestaltungen.
Für DLookup kommt der Wert des Formulartextfeldes von "außen" und muss daher datentypabhängig besonders formatiert werden.
Datum an SQL-String übergeben (https://www.donkarl.com?FAQ6.8)
VBA in SQL (https://www.ms-office-forum.net/forum/showpost.php?p=2060307&postcount=2)
So, nun musst Du nur noch 1 und 1 zusammenzählen. Ich unterstelle, Du kannst das und willst nicht zwingend unmittelbar die 2.
Moin Eberhard,
habe mein Bestes gegeben, hat augenscheinlich nicht gereicht....:-(
Bekomme das einfach nicht hin.....
Was hast du denn versucht nachdem du alle Links von Eberhard gelesen hast?
...habe versucht den Syntax mit between und and einzubauen, doch leider ohne Erfolg.
Einen einzelnen Wert mit Dlookup aus Tabelle/Abfrage das funktioniert tadellos, nur halt nicht zwischen zwei Werten....
Hallo,
Zitatdoch leider ohne Erfolg.
Das ist eine Fehlerbeschreibung die unbrauchbar bzw. eher sinnlos ist.
Zitatden Syntax mit between und and einzubauen,
Wie stellst Du Dir eine Fehlersuche vor, wenn man nicht sieht, was Du gemacht hast?
Es wäre auch überaus hilfreich zu zeigen,
was funktioniert.
Hallo Klaus,
wenn ich den Zeitraum zwischen "von" und "bis" vereinzele, dann funktioniert es:
If DLookup("date", "tblFerien", "date = [txtdate1]") Then
txtWd1.BackColor = RGB(192, 192, 255)
txtD1.BackColor = RGB(192, 192, 255)
UfrmE1!D1.BackColor = RGB(192, 192, 255)
UfrmE2!D1.BackColor = RGB(192, 192, 255)
End If
Das gleiche Ergebnis möchte ich nun erzielen, wenn "date" zwischen zwei Datum liegt. Weiter als hier bin ich nicht gekommen:
Private Sub Befehl26_Click()
Dim strvon As String
Dim strbis As String
Dim strSQL As String
strvon = Format([tblFerien]![von], "\#yyyy\-mm\-dd\#")
strbis = Format([tblFerien]![bis], "\#yyyy\-mm\-dd\#")
strSQL = "SELECT * FROM Tabelle WHERE tblFerien.von > " & strvon
strSQL = "SELECT * FROM Tabelle WHERE tblFerien.bis < " & strbis
date = between strvon and strbis
dlookup("date", ????,("date = [txtDate1]")
End Sub
Ich bitte um den richtigen Syntax......
Hallo,
versuche es mal so (ungetestet):
If Me.txtDatum = DLookup("date", "tblFerien", "date between " & Format(Me.[von], "\#yyyy\-mm\-dd\#") & " and " & Format(Me.[bis], "\#yyyy\-mm\-dd\#")) Then Der Rest des gezeigten Codes braucht es nicht.
Wieso ist bei Dir ein Datuem ein Textfeld (txtDatum) ?
Hallo!
Ich bitte um den richtigen Syntax...... Vielleicht scheitert es auch an der Logik?
Nehmen wir an, in der Textbox txtDatum ist der 30.01.2023 eingetragen.
Wie würde eine SQL-Anweisung (mit diesem Fix-Wert) aussehen, die die gewünschten Daten liefert?
Anm.: kannst du in einer Access-Abfrage testen.
Gruß
Josef
Hallo Klaus,
leider funktioniert das nicht.
Habe allerdings in der Tabelle auch nicht das Feld "date".
Im Anhang findest Du 2 screenshots.
Im ersten der Originalaufbau, d.h. mit den Feldern "von" und "bis".
Im zweiten mein Versuch, bei dem ich den Zeitraum einzeln aufgeführt habe. Damit funktionierte ja auch die Geschichte. Hier gibt es auch das Feld "date".
ZitatWieso ist bei Dir ein Datuem ein Textfeld (txtDatum) ?
Es ist ein Dienstplan. Die Textfelder enthalten das Tagesdatum einen jeweiligen Monats.
Hätte ich hier einen anderen Typ wählen sollen?
Habt Erbarmen
If DLookup("[date]", "tblFerien", SQLDatum(Me.txtDate1) & " BETWEEN [von] AND [bis]" ThenPublic Function SQLDatum( _
datWert As Date) As String
'braucht man ständig und macht den Code m.E. lesbarer
SQLDatum = _
Format$(datWert, "\#yyyy\-mm\-dd\#")
End Function@Lalikowski BETWEEN ... AND schliesst die Grenzen mit ein. Wenn du diese Tage nicht dabei haben willst,
musst du mit "<" und ">" arbeiten
... "tblFerien", SQLDatum(Me.txtDate1) & " > [von] AND " & SQLDatum(Me.txtDate1) & " < [bis]"
[OT]
Mit < und > würde ich sowieso filtern, da ich nicht glaube, dass Access/ACE den Ausdruck Konstante between Datenfeld1 and Datenfeld2 indexfreundlich auflösen kann.
Gruß
Josef
Hallo Josef,
Tja, mir fehlt halt immer noch eine Menge Hintergrundwissen.
Kann er ja ausprobieren.
gruss ekkehard