Neuigkeiten:

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

Mobiles Hauptmenü

Dlookup von-bis Datum

Begonnen von Lalikowski, Januar 21, 2023, 11:23:21

⏪ vorheriges - nächstes ⏩

Lalikowski

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

  •  

ebs17

#1
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

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
VBA in SQL


So, nun musst Du nur noch 1 und 1 zusammenzählen. Ich unterstelle, Du kannst das und willst nicht zwingend unmittelbar die 2.
Mit freundlichem Glück Auf!

Eberhard
  •  

Lalikowski

Moin Eberhard,

habe mein Bestes gegeben, hat augenscheinlich nicht gereicht....:-(

Bekomme das einfach nicht hin.....
  •  

Beaker s.a.

Was hast du denn versucht nachdem du alle Links von Eberhard gelesen hast?
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •  

Lalikowski

...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....
  •  

MzKlMu

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.


Gruß
Klaus
  •  

Lalikowski

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......
  •  

MzKlMu

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) ?
Gruß
Klaus
  •  

Josef P.

#8
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

Lalikowski

#9
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?
  •  

Beaker s.a.

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]"
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •  

Josef P.

[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

Beaker s.a.

Hallo Josef,
Tja, mir fehlt halt immer noch eine Menge Hintergrundwissen.
Kann er ja ausprobieren.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •