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 mediante 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 ESTADOUNIDENSE.

Causa

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

Resolución

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

Estado

Este comportamiento es una característica del diseño de la aplicación.

Más información

La configuración de fecha de Visual FoxPro predeterminada es AMERICAN. Sin embargo, los formatos de fecha se pueden establecer en los siguientes formatos:

Configuración de fecha Date Format
AMERICANO mm/dd/aaaa
ANSI aaaa.mm.dd
BRITÁNICO/FRANCÉS dd/mm/aaaa
ALEMÁN dd.mm.aaaa
ITALIANO dd-mm-aaaa
JAPÓN aaaa/mm/dd
TAIWÁN aaaa/mm/dd
E.E.U.U mm-dd-aaaa
MDY mm/dd/aaaa
DMY dd/mm/aaaa
YMD aaaa/mm/dd
SHORT Formato de fecha corto determinado por la configuración de fecha corta de Windows Panel de control.
LARGO Formato de fecha larga determinado por la configuración de fecha larga de Windows Panel de control.

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.