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
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
Beachten Sie, dass keine Datensätze zurückgegeben oder angezeigt werden.
Kommentieren Sie die folgende Codezeile aus:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
Heben Sie die Auskommentierung der folgenden Codezeile auf:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
Führen Sie das Programm erneut aus, und stellen Sie fest, dass Daten zurückgegeben und auf dem Bildschirm angezeigt werden.