La query del driver ODBC di Visual FoxPro ha esito negativo se il formato della data non è american date
Questo articolo consente di risolvere il problema che si verifica quando si esegue una query ODBC su tabelle Visual FoxPro usando il driver ODBC Visual FoxPro.
Versione originale del prodotto: Visual FoxPro
Numero KB originale: 229854
Sintomi
Quando si esegue una query ODBC su tabelle Visual FoxPro usando il driver ODBC Visual FoxPro, non vengono restituiti record quando la clausola WHERE include una data non in formato american date.
Causa
Il driver ODBC Visual FoxPro accetta solo date in un formato american date rigoroso.
Risoluzione
Convertire le date passate nella clausola WHERE dell'istruzione SELECT-SQL in un formato di data AMERICAN.
Stato
Si tratta di un comportamento legato alla progettazione del prodotto.
Ulteriori informazioni
L'impostazione predefinita della data di Visual FoxPro è AMERICAN. I formati di data, tuttavia, possono essere impostati sui formati seguenti:
Impostazione data | Formato data |
---|---|
AMERICANO | mm/gg/aa |
ANSI | yy.mm.dd |
INGLESE/FRANCESE | gg/mm/aa |
TEDESCO | dd.mm.yy |
ITALIANO | dd-mm-yy |
GIAPPONE | aa/mm/gg |
TAIWAN | aa/mm/gg |
USA | mm-dd-yy |
MDY | mm/gg/aa |
DMY | gg/mm/aa |
YMD | aa/mm/gg |
BREVE | Formato data breve determinato dall'impostazione data breve Pannello di controllo Windows. |
LUNGO | Formato data estesa determinato dall'impostazione Data estesa di Windows Pannello di controllo. |
Passaggi per riprodurre il comportamento
Creare un file di programma denominato Odbctest.prg usando il codice seguente:
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
Si noti che non vengono restituiti o visualizzati record.
Commenta la seguente riga di codice:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
Rimuovere il commento dalla riga di codice seguente:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
Eseguire nuovamente il programma e osservare che i dati vengono restituiti e visualizzati sullo schermo.