Kriterienausdruck unverträglich!!! Brauche Hilfe!



  • Ich arbeite mit dem C++Builder 2007 und möchte eine Abfrage aus einer Access-Datenbank (.mdb) durchführen.
    Es geht darum, Datensätze zu filtern, die zwischen zwei Datumsangaben liegen.
    D.h. ich habe in der Datenbank eine Spalte "Datum".
    Jetzt möchte ich z.B. nur Einträge haben, die zwischen dem "01.01.2007" und "01.02.2007" liegen.

    Mein bisheriger Befehl lautete: "select * from daten WHERE datum >= '01.01.2007' AND datum <= '01.02.2007'"

    Daraufhin erhalte ich eine Fehlermeldung "Datentypen in Kriterienausdruck unverträglich". Wo liegt der Fehler?



  • Hallo

    BETWEEN

    Mfg
    Klaus



  • cool Klaus
    so ein between hinklatschen!

    ich würde mal davon ausgehen,

    datum ein datumstyp ist und die '01.01.2007' eine zeichenkette
    vielleicht so
    datum >= cast('01.01.2007' as date)

    und bei dem anderen natürlich auch

    ansonsten musst du halt dafür sorgen, das die TYPEN kompatibel sind.
    wie auch immer das bei access geht.



  • SELECT * FROM daten WHERE datum >= '2007-01-01' AND datum <= '2007-02-01'
    

    oder

    SELECT * FROM daten WHERE datum BETWEEN '2007-01-01' AND '2007-02-01'
    


  • Ich hab mir angewöhnt, insbesondere bei Datumsangaben, parametrisierte Selects zu verwenden. Macht einem das Leben leichter, da die Konvertierung des Typs vom der Datenquelle in das entsprechende Format automatisch durchgeführt wird.
    Ich hab schon oft genug erlebt, dass das, was auf Datenbank A prima klappt auf B dann obigen Fehler wirft. Manchmal reicht das Ändern der Datumsanzeigeeinstellungen unter Windows, um diesen Fehler zu produzieren...

    TADODataSet1->SQL->Clear();
    TADODataSet1->SQL->Add("SELECT * FROM daten WHERE datum BETWEEN :pDatumVon AND :pDatumBis");
    TADODataSet1->ParamByName("pDatumVon")->AsDateTime = TDateTime(2007,1,1);
    TADODataSet1->ParamByName("pDatumBis")->AsDateTime = TDateTime(2007,1,2);
    

Log in to reply