Datum vom DateTimePicker mit Date-Wert aus Access vergleichen (SELECT WHERE Abfrage)

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Pe..CH.

    Datum vom DateTimePicker mit Date-Wert aus Access vergleichen (SELECT WHERE Abfrage)

    Hallo, ich bin neu hier.

    Ich bin Anfänger bzw. Wiedereinsteiger (nach 20 Jahren) und habe mich in ein Projekt hinein quatschen lassen. Ich bin soweit, dass ich Daten in einer Access Datenbank speichern kann. Dazu gehören auch Daten vom Typ Date, die über einen DateTimePicker gewählt werden. Nun möchte ich Datensätze suchen, das Suchkriterium ist wieder ein Datum aus einem DateTimePicker.

    Ich bekomme eine Fehlermeldung (Dateitypen in Kriterienausdruck unverträglich). Nun habe ich nach einer Lösung gesucht und heraus gefunden, dass Access zwar ein Datum tt.mm.jjjj anzeigt, aber die Uhrzeit dennoch mitspeichert. Wenn ich die DB in Access öffne, sehe ich nur Tag-Monat-Jahr.

    Meine Abfrage sieht daher so aus:

    VB.NET-Quellcode

    1. Dim AbfrageDatum = CDate(DateTimePicker.Text)
    2. ...
    3. ...
    4. cmd.CommandText = "SELECT * FROM MeineTabelle WHERE Datum = '" & Format(AbfrageDatum, "MM-dd-yyyy hh:mm:ss") & "' "


    Ich schaffe es scheinbar nicht, das Datum in die Form zu bringen, die es dem in Access gespeichertem Wert ebenbürtig macht. Wenn ich das formatierte AbfrageDatum überwache, sieht es eigentlich ganz gut aus. Aber ich sehe nicht wirklich, was Access da speichert. Ich bin also überfordert an diesem Punkt und würde mich über Hilfe freuen. Gleichzeitig entschuldige ich mich für das wahrscheinlich triviale Anfängerproblem, aber ich brauche einen Schubs in die richtige Richtung.

    Vielen Dank und einen schönen Gruss aus Baselland

    P.
    Hi,

    zum einen muss in Access das Datum statt "'" mit "#" umfasst werden

    Pe..CH schrieb:

    cmd.CommandText = "SELECT * FROM MeineTabelle WHERE Datum = '" & Format(AbfrageDatum, "MM-dd-yyyy hh:mm:ss") & "' "


    Zum andern mag Access die Funktion nicht so, wie man es erwartet. Ich habe mir deshalb diese Funktion angelegt:

    Visual Basic-Quellcode

    1. Public Function getDatumString(ByVal Datum As Date) As String
    2. getDatumString = "#" & Month(Datum) & "/" & Day(Datum) & "/" & Year(Datum) & "#"
    3. End Function


    Und so wird sie dann in Deinem Code eigefügt.

    Visual Basic-Quellcode

    1. cmd.CommandText = "SELECT * FROM MeineTabelle WHERE Datum = " & getDatumString(AbfrageDatum)
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „INOPIAE“ ()

    Zum andern mag Access die Funktion nicht so, wie man es erwartet. Ich habe mir deshalb diese Funktion angelegt:

    Visual Basic-Quellcode

    1. Public Function getDatumString(ByVal Datum As Date) As String
    2. getDatumString = "#" & Month(Datum) & "/" & Day(Datum) & "/" & Year(Datum) & "#"
    3. End Function


    Das funktioniert, vielen Dank. Ich wäre da nicht drauf gekommen und habe auch nichts dergleichen im Internet gefunden. Es war jedoch eine Änderung notwendig:

    VB.NET-Quellcode

    1. getDatumString = "#" & Month(Datum) & "/" & DateAndTime.Day(Datum) & "/" & Year(Datum) & "#"


    Beim Aufruf von Day trat ansonsten ein Fehler auf.