"Between" in einer SQL-Abfrage

  • VB6

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von martinB.

    "Between" in einer SQL-Abfrage

    Hallo alle,

    ich bin schier am verzweifeln ...

    Mein Problem ist folgendes:
    In einer ADO Datenbanktabelle habe ich eine Spalte mit Datum mit dem Namen "Rechnungsdatum". Nun möchte ich per SQL-Abfrage alle Datensätze, die zwischen einem Datum x und einem Datum y liegen, in einer Tabelle anzeigen.

    Die relevanten Daten werden aus zwei DTPicker-Steuerelementen übernommen.

    Mein Code sieht folgendermaßen aus:

    SQLString = "SELECT * FROM Journal WHERE (Rechnungsdatum BETWEEN '" & DTPicker1.Value & "' AND '" & DTPicker2.Value & "') ORDER BY Rechnungsnummer"
    Adodc2.RecordSource = SQLString
    Set DataGrid1.DataSource = Adodc2
    Adodc2.Refresh


    Bei der Ausführung bekomme ich jedoch die Fehlermeldung: "Datentypen in Kriterienausdruck unverträglich."

    Beim anschließenden Debuggen ist "Adodc2.Refresh" gelb markiert.
    Wo zum Geier liegt denn der Fehler?

    Herzlichen Dank schon mal für die Mühe des Studierens von meinem Code.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „martinB“ ()

    Im DTPicker wird das Datum "08.03.2006" ausgegeben. Die Datenbank möchte aber evtl das Datum als "2006-03-08" (MySQL). Was für eine Datenbank verwendest du eigentlich?
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Schönen Dank schon mal für die Beteiligung an meinem Problem.

    Nun, die Datenbank basiert auf einem ADODC-Steuerelement (VB 6 - SP 6). Die Verbindung dazu wird zur Laufzeit mit

    Adodc2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Rechnung.mdb;Persist Security Info=False"

    hergestellt, was auch grundsätzlich funktioniert (den gleichen ConnectionString habe ich erfolgreich auch in anderen Formularen angewendet).

    DTPicker liefert als Value das Datum im Format 08.03.2006. Ich hatte bereits über Suchen hier im Forum Probleme bzgl. des Datums gefunden, jedoch dies nicht auf meinen Fall bezogen, da mir das Datum bei der Einzelschritt-Ausführung unter der Anzeige des Aktuellen Wertes im Format wie o. g. angezeigt wird. Sollte es VB-intern dennoch in einem anderen Format behandelt werden???
    Gibt es denn den "between" Befehl in so einer Datenbank? Weil sonst versuche doch mal:

    (Rechnungsdatum >= '" & DTPicker1.Value & "' AND RECHNUNGSDATUM <='" & DTPicker2.Value & "')

    Oder mache eine manuelle Typkonvertierung mittels CStr:

    ... CStr(DTPicker1.Value) ...
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo Marcus,
    danke für den Tip, aber so funktioniert es leider auch nicht. Offensichtlich funktioniert der rechnerische Datumsvergleich in einer SQL-Abfrage nicht.

    Ich habe das Problem jetzt folgendermaßen gelöst, in dem ich jeweils den Tag-, Monats- und Jahr-Abschnitt des Datums miteinander vergleiche und zwar mittels "Left", "Mid" und "Right":

    SQLString = "SELECT * FROM Journal where left(Rechnungsdatum,2) BETWEEN " & Left(DTPicker1.Value, 2) & " AND " & Left(DTPicker2.Value, 2) & " AND mid(Rechnungsdatum,4,2) BETWEEN " & Mid(DTPicker1.Value, 4, 2) & " AND " & Mid(DTPicker2.Value, 4, 2) & " AND right(Rechnungsdatum,2) BETWEEN " & Right(DTPicker1.Value, 2) & " AND " & Right(DTPicker2.Value, 2)

    Es ist zwar ein fürchterlich langer und etwas komplexer Befehl, aber weil er funktioniert, ist mir das mal gerade eben egal :)

    Nochmals herzlichen Dank für Eure Anteilnahme :)
    Es ist zwar ein fürchterlich langer und etwas komplexer Befehl

    Bau dir einfach eine Funktion, welche das Datum ins SQL-Format umwandelt und dein SQL-String ist wieder fast so kurz wie vorher...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Ups ... mein o. g. funktionierender SQL-String funktioniert leider doch nicht richtig, nämlich bei Monatsübergreifenden Abfragen.

    @Agent: leichter gesagt als getan ... ich habe noch nie eine Funktion gebaut und weiß deshalb auch nicht wie man so etwas angeht.

    Deshalb habe ich weiter in der MSDN Library gestöbert und siehe da: hier kommt der ultimative SQL-String für alle, die eine ähnliche Abfrage gestalten müssen:

    Zuerst muß das Datum des DTPicker-Steuerelementes in das Format MM/TT/JJJJ umgewandelt werden ...

    varDatum1 = Mid(DTPicker1.Value, 4, 2) & "/" & Left(DTPicker1.Value, 2) & "/" & Right(DTPicker1.Value, 4)
    varDatum2 = Mid(DTPicker2.Value, 4, 2) & "/" & Left(DTPicker2.Value, 2) & "/" & Right(DTPicker2.Value, 4)


    Dann kommt der String wie folgt:

    SQLString = "SELECT * FROM Journal WHERE Rechnungsdatum BETWEEN #" & varDatum1 & "# And #" & varDatum2 & "# ORDER BY Rechnungsdatum"

    ... und siehe da, es flutscht

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

    Nein, Pascal, das einzige Forum, in dem ich sonst noch aktiv (Moderator) bin, ist das Terragen-Forum auf terradreams.de.

    Ich denke auch, daß hier wohl überwiegend sehr junge Leute aktiv sind - ich hingegen bin im vergangenen Jahr 50 geworden :)

    Sorry ... habe den PN-Butten zu spät gesehen :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „martinB“ ()