如果日期格式不是美國日期格式,Visual FoxPro ODBC 驅動程式查詢會失敗


徵狀


當您使用 Visual FoxPro ODBC 驅動程式針對 Visual FoxPro 資料表執行 ODBC 查詢時,如果 WHERE 子句包含非美國日期格式的日期,就不會傳回任何記錄。

原因


Visual FoxPro ODBC 驅動程式只接受全美日期格式的日期。

解決方案


將 SELECT SQL 語句的 WHERE 子句中傳送的任何日期轉換為美國日期格式。

狀態


產生此錯誤是系統刻意為之。

其他相關資訊


預設的 Visual FoxPro [日期] 設定為 [美國]。 不過,日期格式可能會設定為下列格式:
日期設定日期格式
美國國家標準學會mm/dd/yy
ANSIyy.mm.dd
BRITISH/FRENCH dd/mm/yy
德語dd.mm.yy
義大利文dd mm
日本yy/mm/dd
臺灣yy/mm/dd
USAmm-年月日
MDYmm/dd/yy
DMYdd/mm/yy
YMDyy/mm/dd
由 Windows [控制台] 的 [簡短日期] 設定所決定的短日期格式。
由 Windows [控制台] 的 [長日期] 設定所決定的長日期格式。

再現行為的步驟

  1. 使用下列程式碼,建立名為 "Odbctest prg" 的程式檔:
    CLEARDO 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 ConnectionoConnection=CREATEOBJECT("ADODB.Connection")oConnection.ConnectionString = lcConnStroConnection.CursorLocation   = 3oConnection.OPEN* lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"*!* Create An ADO recordsetrs=CREATEOBJECT("ADODB.Recordset")rs.activeconnection         = oConnectionrs.CursorLocation           = 3rs.cursortype               = 1rs.LockType                 = 3rs.OPEN(lcSQL)IF !rs.EOF   rs.movefirst   DO WHILE !rs.EOF      ? rs.FIELDS(0).VALUE      rs.movenext   ENDDOENDIFrs.CLOSEoConnection.CLOSE 
  2. 請注意,不會傳回或顯示任何記錄。
  3. 在下列程式程式碼加上批註:
    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {93/07/22}"
  4. 取消注釋下列程式程式碼:
    lcSQL="SELECT * FROM ORDERS WHERE ORDER_DATE < {07/22/93}"
  5. 重新執行程式,並觀察資料會傳回並顯示在畫面上。