Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Lalikowski am Januar 21, 2023, 11:23:21

Titel: Dlookup von-bis Datum
Beitrag von: Lalikowski am Januar 21, 2023, 11:23:21
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

Titel: Re: Dlookup von-bis Datum
Beitrag von: ebs17 am Januar 21, 2023, 12:25:54
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.
Titel: Re: Dlookup von-bis Datum
Beitrag von: Lalikowski am Januar 28, 2023, 07:44:11
Moin Eberhard,

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

Bekomme das einfach nicht hin.....
Titel: Re: Dlookup von-bis Datum
Beitrag von: Beaker s.a. am Januar 28, 2023, 12:20:45
Was hast du denn versucht nachdem du alle Links von Eberhard gelesen hast?
Titel: Re: Dlookup von-bis Datum
Beitrag von: Lalikowski am Januar 28, 2023, 14:05:20
...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....
Titel: Re: Dlookup von-bis Datum
Beitrag von: MzKlMu am Januar 28, 2023, 14:09:35
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.


Titel: Re: Dlookup von-bis Datum
Beitrag von: Lalikowski am Januar 30, 2023, 11:40:14
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......
Titel: Re: Dlookup von-bis Datum
Beitrag von: MzKlMu am Januar 30, 2023, 12:18:06
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) ?
Titel: Re: Dlookup von-bis Datum
Beitrag von: Josef P. am Januar 30, 2023, 12:42:28
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
Titel: Re: Dlookup von-bis Datum
Beitrag von: Lalikowski am Januar 31, 2023, 09:42:49
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?
Titel: Re: Dlookup von-bis Datum
Beitrag von: Beaker s.a. am Januar 31, 2023, 16:21:00
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]"
Titel: Re: Dlookup von-bis Datum
Beitrag von: Josef P. am Januar 31, 2023, 17:37:20
[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
Titel: Re: Dlookup von-bis Datum
Beitrag von: Beaker s.a. am Januar 31, 2023, 17:43:23
Hallo Josef,
Tja, mir fehlt halt immer noch eine Menge Hintergrundwissen.
Kann er ja ausprobieren.

gruss ekkehard