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
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
Observe que no se devuelve ni se muestra ningún registro.
Comente la siguiente línea de código:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
Quite la marca de comentario de la siguiente línea de código:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
Vuelva a ejecutar el programa y observe que los datos se devuelven y se muestran en la pantalla.