A consulta do Driver ODBC do Visual FoxPro falhará se o formato de data não for o formato de data americano

Este artigo ajuda você a resolve o problema que ocorre ao executar uma consulta ODBC em tabelas do Visual FoxPro usando o Driver ODBC do Visual FoxPro.

Versão original do produto: Visual FoxPro
Número de KB original: 229854

Sintomas

Ao executar uma consulta ODBC em tabelas do Visual FoxPro usando o Driver ODBC do Visual FoxPro, nenhum registro é retornado quando a cláusula WHERE inclui uma data que não esteja no formato de data americana.

Motivo

O Driver ODBC do Visual FoxPro só aceita datas em um formato de data americano rigoroso.

Resolução

Converta todas as datas passadas na cláusula WHERE da instrução SELECT-SQL em um formato de data americano.

Status

Este é o comportamento padrão.

Mais informações

A configuração de data padrão do Visual FoxPro é AMERICAN. Os formatos de data, no entanto, podem ser definidos para os seguintes formatos:

Configuração de data Formato de Data
AMERICANO mm/dd/yy
ANSI yy.mm.dd
BRITÂNICO/FRANCÊS dd/mm/yy
ALEMÃO dd.mm.yy
ITALIANO dd-mm-yy
JAPÃO yy/mm/dd
TAIWAN yy/mm/dd
EUA mm-dd-yy
MDA mm/dd/yy
DMY dd/mm/yy
YMD yy/mm/dd
SHORT Formato de data curta determinado pelo Windows Painel de Controle configuração de data curta.
LONGAS Formato de data longa determinado pela configuração de data longa do Windows Painel de Controle.

Etapas para reproduzir o comportamento

  1. Crie um arquivo de programa chamado Odbctest.prg, usando o seguinte código:

    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. Observe que nenhum registro é retornado ou exibido.

  3. Comente a seguinte linha de código:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
    
  4. Descompactar a seguinte linha de código:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
    
  5. Execute novamente o programa e observe que os dados são retornados e exibidos na tela.