本文幫助您解決使用 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 的預設日期設定為 AMERICAN。 不過,日期格式可以設置為以下格式:
日期設定 | 日期格式 |
---|---|
美國人 | mm/dd/yy |
ANSI(美國國家標準學會) | yy.mm.dd |
英國/法國 | dd/mm/yy |
德文 | dd.mm.yy |
意大利语 | dd-mm-yy |
日本 | yyyy/mm/dd |
臺灣 | yyyy/mm/dd |
美國 | mm-dd-yy |
MDY | mm/dd/yy |
DMY | dd/mm/yy |
YMD | yyyy/mm/dd |
短 | 短日期格式由 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}"
請重新執行該程式,並觀察資料被返回且顯示在螢幕上。