使用dbExpress的TSQLQuery無法使用傳遞日期參數的形式嗎? |
答題得分者是:Justmade
|
ernest
一般會員 發表:17 回覆:21 積分:7 註冊:2002-04-15 發送簡訊給我 |
請教各位
小弟在使用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 發送簡訊給我 |
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 發送簡訊給我 |
|
ernest
一般會員 發表:17 回覆:21 積分:7 註冊:2002-04-15 發送簡訊給我 |
引言: 解決辦法:使用 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 發送簡訊給我 |
|
ernest
一般會員 發表:17 回覆:21 積分:7 註冊:2002-04-15 發送簡訊給我 |
|
ernest
一般會員 發表:17 回覆:21 積分:7 註冊:2002-04-15 發送簡訊給我 |
引言: 應仍可用 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |