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

  1. 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
    
  2. Si noti che non vengono restituiti o visualizzati record.

  3. Commenta la seguente riga di codice:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
    
  4. Rimuovere il commento dalla riga di codice seguente:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
    
  5. Eseguire nuovamente il programma e osservare che i dati vengono restituiti e visualizzati sullo schermo.