如果日期格式不是美国日期格式,Visual FoxPro ODBC 驱动程序查询将失败
本文可帮助你解决在使用 Visual FoxPro ODBC 驱动程序针对 Visual FoxPro 表运行 ODBC 查询时出现的问题。
原始产品版本: Visual FoxPro
原始 KB 编号: 229854
症状
使用 Visual FoxPro ODBC 驱动程序对 Visual FoxPro 表执行 ODBC 查询时,当 WHERE 子句包含的日期不是美国日期格式时,不会返回任何记录。
原因
Visual FoxPro ODBC 驱动程序仅接受严格美国日期格式的日期。
解决方案
将 SELECT-SQL 语句的 WHERE 子句中传递的任何日期转换为美国日期格式。
状态
此行为是设计使然。
更多信息
默认 Visual FoxPro 日期设置为“美国”。 但是,日期格式可以设置为以下格式:
日期设置 | Date Format |
---|---|
美国 | mm/dd/yy |
Ansi | yy.mm.dd |
BRITISH/FRENCH | dd/mm/yy |
德语 | dd.mm.yy |
意大利语 | dd-mm-yy |
日本 | yy/mm/dd |
台湾 | yy/mm/dd |
美国 | mm-dd-yy |
MDY | mm/dd/yy |
DMY | dd/mm/yy |
YMD | yy/mm/dd |
SHORT | 短日期格式由 Windows 控制面板短日期设置确定。 |
长 | 由 Windows 控制面板长日期设置确定的长日期格式。 |
重现行为的步骤
使用以下代码创建名为 Odbctest.prg 的程序文件:
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
观察未返回或显示任何记录。
注释以下代码行:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
取消注释以下代码行:
lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
重新运行程序,并观察数据是否返回并显示在屏幕上。