Visual FoxPro ODBC Driver-Abfrage schlägt fehl, wenn das Datumsformat nicht das AMERIKANISCHE Datumsformat ist

Dieser Artikel hilft Ihnen, das Problem zu beheben, das auftritt, wenn Sie eine ODBC-Abfrage für Visual FoxPro-Tabellen mithilfe des Visual FoxPro-ODBC-Treibers ausführen.

Ursprüngliche Produktversion: Visual FoxPro
Ursprüngliche KB-Nummer: 229854

Problembeschreibung

Beim Ausführen einer ODBC-Abfrage für Visual FoxPro-Tabellen mit dem Visual FoxPro-ODBC-Treiber werden keine Datensätze zurückgegeben, wenn die WHERE-Klausel ein Datum enthält, das nicht im AMERIKANISCHEn Datumsformat vorliegt.

Ursache

Der Visual FoxPro-ODBC-Treiber akzeptiert nur Datumsangaben in einem strengen AMERIKANISCHEn Datumsformat.

Lösung

Konvertieren Sie alle Datumsangaben, die in der WHERE-Klausel der SELECT-SQL-Anweisung übergeben werden, in ein AMERICAN-Datumsformat.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

Die Standarddatumseinstellung für Visual FoxPro ist AMERICAN. Datumsformate können jedoch auf die folgenden Formate festgelegt werden:

Datumseinstellung Date Format
AMERIKANER mm/TT/yy
ANSI yy.mm.dd
BRITISCH/FRANZÖSISCH TT/mm/jj
DEUTSCH tt.mm.yy
ITALIENISCH dd-mm-yy
JAPAN yy/mm/tt
TAIWAN yy/mm/tt
USA mm-tt-yy
MDY mm/TT/yy
DMY TT/mm/jj
YMD yy/mm/tt
SHORT Kurzes Datumsformat, das durch die Einstellung windows Systemsteuerung kurzes Datum bestimmt wird.
LANGE Langes Datumsformat, das durch die Einstellung windows Systemsteuerung langes Datum bestimmt wird.

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie mit dem folgenden Code eine Programmdatei mit dem Namen Odbctest.prg:

    CLEAR
    DO CASE
        CASE "6.0"$VERSION()
            lcConnStr="DRIVER={Microsoft Visual FoxPro Driver};" + ;
            "Exclusive=No;SourceType=DBF;SourceDB="+HOME(2)+"DATA"
        CASE "5.0"$VERSION()
            lcConnStr="DRIVER={Microsoft Visual FoxPro Driver};" + ;
            "Exclusive=No;SourceType=DBF;SourceDB="+HOME()+"SAMPLES\DATA"
        CASE "3.0"$VERSION()
            lcConnStr="DRIVER={Microsoft Visual FoxPro Driver};" + ;
            "Exclusive=No;SourceType=DBF;SourceDB="+HOME()+"SAMPLES\DATA"
            OTHERWISE && Version is VFP 7.0,8.0, or 9.0
            lcConnStr="DRIVER={Microsoft Visual FoxPro Driver};" + ;
            "Exclusive=No;SourceType=DBF;SourceDB="+HOME(2)+"DATA"
    ENDCASE
    
    *!* Create An ADO Connection
    
    oConnection=CREATEOBJECT("ADODB.Connection")
    oConnection.ConnectionString = lcConnStr
    oConnection.CursorLocation = 3
    oConnection.OPEN
    
    * lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"*!* Create An ADO recordset
    rs=CREATEOBJECT("ADODB.Recordset")
    rs.activeconnection = oConnection
    rs.CursorLocation = 3
    rs.cursortype = 1
    rs.LockType = 3
    rs.OPEN(lcSQL)
    IF !rs.EOF
        rs.movefirst
        DO WHILE !rs.EOF
            ? rs.FIELDS(0).VALUE
            rs.movenext
        ENDDO
    ENDIF
    rs.CLOSE
    oConnection.CLOSE
    
  2. Beachten Sie, dass keine Datensätze zurückgegeben oder angezeigt werden.

  3. Kommentieren Sie die folgende Codezeile aus:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
    
  4. Heben Sie die Auskommentierung der folgenden Codezeile auf:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
    
  5. Führen Sie das Programm erneut aus, und stellen Sie fest, dass Daten zurückgegeben und auf dem Bildschirm angezeigt werden.