線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2923
推到 Plurk!
推到 Facebook!

使用dbExpress的TSQLQuery無法使用傳遞日期參數的形式嗎?

答題得分者是:Justmade
ernest
一般會員


發表:17
回覆:21
積分:7
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-26 18:05:27 IP:61.30.xxx.xxx 未訂閱
請教各位 小弟在使用DbExpress中的TSQLQuery欲傳遞日期參數時, 會發生錯誤, 如下: procedure TForm1.BitBtn1Click(Sender: TObject); begin try with Query1 do begin Close;SQL.Clear; SQL.Add(' select * from Table where udate >= :upddate'); ParamByName('upddate').AsDateTime := StrToDate(MaskEdit1.Text); Open; end; finally // Query1.Close; end; end; procedure TForm1.Button1Click(Sender: TObject); begin try with SQLQuery1 do begin Close;SQL.Clear; SQL.Add(' select * from Table where udate >= :upddate'); ParamByName('upddate').AsDateTime := StrToDate(MaskEdit1.Text); Open; end; finally // SQLQuery1.Close; end; end; 其中, 第一個procedure使用的是TQuery, 執行時是正常的, 但第二個procedure執行時就會出現如下的錯誤: DBX Error: Invalid Field Type 請問該如何解決呢? 謝謝!!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-26 18:47:33 IP:218.16.xxx.xxx 未訂閱
ernest 兄你好像是用 MySQL 的罷? 我剛測試過這是 Borland MySQL dbExpress driver 的一個 Bug,我試過可以得出你提出的錯誤訊息。 我試過轉用 CoreLib 的試用版 driver 沒這個問題 我也試過用 Open ODBC driver 沒有這個錯誤但找出來的資料似乎與條件不合。 有關 MySQL dbExpress Driver 的其他問題及 CoreLib / Open ODBC 的介紹,這參考 : http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27168
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-26 19:14:12 IP:218.16.xxx.xxx 未訂閱
解決辦法:使用 String 來代替 ParamByName('upddate').AsString := FormatDateTime('yyyy-mm-dd',StrToDate(MaskEdit1.Text); 若你 MaskEdit1.Text 已經是 yyyy-mm-dd 格式則可直接使用。 已將這問題加到 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27168
ernest
一般會員


發表:17
回覆:21
積分:7
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-26 21:38:59 IP:61.217.xxx.xxx 未訂閱
引言: 解決辦法:使用 String 來代替 ParamByName('upddate').AsString := FormatDateTime('yyyy-mm-dd',StrToDate(MaskEdit1.Text); 若你 MaskEdit1.Text 已經是 yyyy-mm-dd 格式則可直接使用。 已將這問題加到 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27168
謝謝兩位前輩指教 小弟所使用的資料庫是Oracle, 但原本是希望使用這樣傳遞參數的方法 能夠應用到各種DB, 所以才未附上所使用的DB形式, 小弟有去使用這兩 種方法來作測試, 但結果依然是不樂觀, DbExpress是否還有哪些該設 而又未設的地方呢? 另, 使用傳遞參數的方法是否可應用於各種資料庫呢?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-26 22:10:48 IP:218.16.xxx.xxx 未訂閱
應仍可用 String 代替的,但格式應和 MySQL 的不同。你看看 Oracle 的標準日期格式是甚樣,再代入 FormatDateTime(格式,日期)便可。 應沒有該設未設的了,這個問題的成因相信是 Borland 做 Driver 時以 Interbase 的格式為藍本,在其他 Driver 沒作好修定之固。第三者 Driver 完全沒有這個問題,正好說明問題確是出在 Driver 之中。
ernest
一般會員


發表:17
回覆:21
積分:7
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-26 22:55:03 IP:61.217.xxx.xxx 未訂閱
引言: 應仍可用 String 代替的,但格式應和 MySQL 的不同。你看看 Oracle 的標準日期格式是甚樣,再代入 FormatDateTime(格式,日期)便可。 應沒有該設未設的了,這個問題的成因相信是 Borland 做 Driver 時以 Interbase 的格式為藍本,在其他 Driver 沒作好修定之固。第三者 Driver 完全沒有這個問題,正好說明問題確是出在 Driver 之中。
謝謝Justmade兄 我再試試看!!
ernest
一般會員


發表:17
回覆:21
積分:7
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-27 16:12:52 IP:61.30.xxx.xxx 未訂閱
引言: 應仍可用 String 代替的,但格式應和 MySQL 的不同。你看看 Oracle 的標準日期格式是甚樣,再代入 FormatDateTime(格式,日期)便可。 應沒有該設未設的了,這個問題的成因相信是 Borland 做 Driver 時以 Interbase 的格式為藍本,在其他 Driver 沒作好修定之固。第三者 Driver 完全沒有這個問題,正好說明問題確是出在 Driver 之中。
Justmade兄您好 後來小弟經過測試後依然會有錯誤, 只是這個錯誤是來自於Oracle 小弟有查看Oracle的DateTime Format並將之設定進程式中, 但依然 會有錯誤, 訊息是"ORA-01843:非有效的月份", 但我已經的確依照其 日期格式設定了, 怎麼會這樣呢? 底下是小弟修改後的程式段: procedure TForm1.Button1Click(Sender: TObject); begin try with SQLQuery1 do begin Close;SQL.Clear; SQL.Add(' select * from mkfgoomi where upd_date >= :upddate'); ParamByName('upddate').AsString := FormatDateTime('DD-MON-RR HH.MI.SSXFF AM',StrToDateTime(MaskEdit1.Text)); Open; end; finally // SQLQuery1.Close; end; end;
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-27 18:42:19 IP:218.16.xxx.xxx 未訂閱
'DD-MON-RR HH.MI.SSXFF AM' 不可能是原始格式罷.... 因為我沒用 Oracle, 所以不是很清楚,或許你另開一個問題讓 Oracle 的高手門答罷。還有若你那 Field 是 Date 而非 DateTime, 就不用加入 Time 的資料。
系統時間:2024-05-19 15:59:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!