Neuigkeiten:

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

Mobiles Hauptmenü

DCount Datum Abfragen / Vergleich aktuelles Datum / nur Tag und Monat

Begonnen von mk500, Februar 23, 2023, 12:01:07

⏪ vorheriges - nächstes ⏩

mk500

Hallo zusammen,

ich würde gerne folgendes umsetzen, habe schon das alle Foren durchforstet, aber nichts gefunden, was bei mir funktioniert.
Ich prüfe über VBA eine Spalte in einer Tabelle mit Dcount und wenn genau ein oder mehrere Datensätze vorhanden sind, will ich weiter machen.

If DCount("[Geburtstag]", "Geburtstage", "[Geburtstag] = " & Format(Date, "\#yyyy-mm-dd\#")) > 0 Then
        MsgBox "Test"

Soweit funktioniert das Ganze auch. Jetzt sind aber bei den dort hinterlegten Daten nur der Tag und der Monat relevant, da das Jahr nicht gepflegt wird bzw. nicht relevant ist. Jetzt möchte ich das "aktuelle Datum" so formatieren, dass nur Tag und Monat abgefragt werden. Beispiel: Heute ist der "23.02.", gibt es einen Datensatz "23.02."? (unabhängig davon, welches Jahr dort hinterlegt ist)

Bekomme es nicht ohne Fehlermeldungen umgesetzt, der Ansatz war, die Formatierung entsprechend im Kriterium zu ändern, das funktioniert aber nicht.

If DCount("[Geburtstag]", "Geburtstage", "[Geburtstag] = " & Format(Date, "\#mm-dd\#")) > 0 Then
        MsgBox "Test"

Habt ihr eine Idee?

MzKlMu

Hallo,
verwende die Funktionen Day() und Month(), da spielt das Format keine Rolle.

If Dcount("Geburtstag","Geburtstage","Month(Geburtstag) = Month(date()) and Day(Geburtstag) = day(Date())")>0 Then
Mit Format geht es natürlich auch. Es muss nur auf beiden Seiten des = gleich formatiert werden.
If Dcount("Geburtstag","Geburtstage","Format(Geburtstag,'ddmm') = Format(Date(),'ddmm')") > 0 ThenInnerhalb eines Strings muss das Format in Hochkomma. Und Date ist eine Funktion und muss hier mit einem () Klammerpaar versehen sein.

Deine 1. Codezeile oben kann auch nicht stimmen, hier würden nur Daten ausgegeben welche heute geboren sind. Das Date stimmt dort auch nicht.
Gruß Klaus

mk500

Hallo Klaus,

vielen Dank für die schnelle Rückmeldung.

An Day() und Month() hab ich gar nicht gedacht :o . War so auf die blöde Formatierung fixiert, aber so geht es beides.

Vielen Dank  8)

Josef P.

#3
Eine allgemeine Frage: es werden "hier" immer nur Mini-Datenmengen verarbeitet, weil so selten auf eine mögliche Index-Nutzung geachtet wird?
Ich gebe zu, bei einer Geburtstagsliste werden kaum mehrere 100k Datensätze zu durchsuchen sein. :D
Daher ist der Gedanke an eine Datumstabelle auch nicht ganz so wichtig.


... nur als als Quergedanke, falls einmal jemand in diesen Thread kommt und etwas mehr Datensätze durchsuchen will.

MzKlMu

Hallo,
@Josef
Wie würde da eine Datumstabelle helfen ?
Ich brauche ja nur den Tag und den Monat.
Gruß Klaus

Josef P.

#5
Wie geschrieben, für eine Geburtstagstabelle ist das nicht wirklich relevant. (Ein paar 1000 DS sind auch ausreichend schnell gefiltert, wenn jeder Datensatz der Tabelle geprüft wird.)

select
   L.Geburtsdatum, ...
from
   Kalender as K
   inner join
   Geburtstagsliste as L ON L.Geburtsdatum = K.KalenderDatum
where
   K.KalenderMonat = 2
   and
   K.KalenderTag = 23

Index auf Monat + Tag und schon hat man ein Index-Seek. (Theoretisch müsste Tag + Monat sogar noch besser sein, da man beim 1. Feld bereits eine große Datenmenge eingegrenzt hat. ... für Tag 23 gibt es in der Kalendertabelle weniger Einträge als für den Monat 2 - das ist aber schon sehr speziell und für 12 vs max 31 auch wieder nicht relevant. ;))