Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
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.