Compartir a través de


Se produce un error en la consulta del controlador ODBC de Visual FoxPro si el formato de fecha no es el formato de fecha AMERICANO.

Este artículo le ayuda a resolver el problema que se produce al ejecutar una consulta ODBC en tablas de Visual FoxPro mediante el controlador ODBC de Visual FoxPro.

Versión original del producto: Visual FoxPro
Número de KB original: 229854

Síntomas

Al ejecutar una consulta ODBC en tablas de Visual FoxPro con el controlador ODBC de Visual FoxPro, no se devuelve ningún registro cuando la cláusula WHERE incluye una fecha que no está en formato de fecha AMERICANA.

Causa

El controlador ODBC de Visual FoxPro solo acepta fechas en un formato de fecha ESTADOUNIDENSE estricto.

Solución

Convierta las fechas que se pasan en la cláusula WHERE de la instrucción SELECT-SQL a un formato de fecha americano.

Estado

Este comportamiento es por diseño.

Más información

El valor predeterminado de fecha de Visual FoxPro es AMERICAN. Sin embargo, los formatos de fecha se pueden establecer en los siguientes formatos:

Configuración de fecha Formato de fecha
ESTADOUNIDENSE dd/mm/yy
ANSI (Instituto Nacional Estadounidense de Estándares) dd/mm/yy
BRITÁNICO/FRANCÉS dd/mm/aaaa
ALEMÁN dd.mm.yy
ITALIANO dd-mm-aaaa
JAPÓN aaaa/mm/dd
TAIWÁN aaaa/mm/dd
EE. UU. mm-dd-aaaa
MDY dd/mm/yy
DMY dd/mm/aaaa
YMD aaaa/mm/dd
BREVE Formato de fecha corta determinado por la configuración de fecha corta del Panel de control de Windows.
LARGO Formato de fecha larga determinado por la configuración de fecha larga del Panel de control de Windows.

Pasos para reproducir el comportamiento

  1. Cree un archivo de programa denominado Odbctest.prg con el código siguiente:

    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 no se devuelve ni se muestra ningún registro.

  3. Comente la siguiente línea de código:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
    
  4. Quite la marca de comentario de la siguiente línea de código:

    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
    
  5. Vuelva a ejecutar el programa y observe que los datos se devuelven y se muestran en la pantalla.