全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1123
推到 Plurk!
推到 Facebook!

關於select日期的問題

答題得分者是:folkchen
jay26tw
一般會員


發表:8
回覆:8
積分:3
註冊:2004-02-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-05 02:31:15 IP:210.244.xxx.xxx 未訂閱
try { if((Edit1->Text)=="" || (Edit2->Text)=="") { ShowMessage("日期輸入不完整"); Edit1->SetFocus(); } else { ADOQuery1->Active = false; ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("SELECT * FROM 交易記錄檔 where TxDateTime >= " StrToDate(Edit1->Text) "And TxDateTime <= " StrToDate(Edit2->Text)); ADOQuery1->Active = true; } } catch(...) { ShowMessage("輸入日期格式有誤"); } ///////////////////////////////////////////////////// 搜尋不到 直接顯示"輸入日期格式有誤" 格式為DateTime 想輸入 2004/03/01 2004/03/06 做條件 不然就顯示Abnormal problem直接關閉程式 不知哪裡錯了 請高手指點 謝謝 我是新手,但不是永遠的新手 只要努力不懈,相信成功就在眼前 發表人 - taishyang 於 2004/03/05 13:35:27
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-05 09:29:38 IP:210.68.xxx.xxx 未訂閱
try
{
if((Edit1->Text)=="" || (Edit2->Text)=="")
{
ShowMessage("日期輸入不完整");
Edit1->SetFocus();
}
else
{
ADOQuery1->Active = false;
ADOQuery1->SQL->Clear(); 
ADOQuery1->SQL->Add("SELECT * FROM 交易記錄檔 where TxDateTime >= '"   StrToDate(Edit1->Text)  "' And TxDateTime <= '"   StrToDate(Edit2->Text   "'"));    ADOQuery1->Active = true;
}
}
catch(...)
{
ShowMessage("輸入日期格式有誤");
} 
時間要採用字串的方式 , 試試看吧
jay26tw
一般會員


發表:8
回覆:8
積分:3
註冊:2004-02-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-05 15:21:45 IP:61.30.xxx.xxx 未訂閱
還是不行阿 我猜是我的日期格式為DateTime ex. 2004/3/3 上午 10:33:33 而我輸入的是2004/3/3就字串而言本身就不一樣了 所以是否先要把含有時間的字串先取出 再針對取出的字串做比對 不知道是不是ㄚ??? 我是新手,但不是永遠的新手 只要努力不懈,相信成功就在眼前
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-05 15:36:12 IP:211.20.xxx.xxx 未訂閱
>>ADOQuery1->SQL->Add("SELECT * FROM 交易記錄檔 where TxDateTime >= '" StrToDate(Edit1->Text) "' And TxDateTime <= '" StrToDate(Edit2->Text "'")); 這個寫法不能過的原因是,在串SQL字串前把Edit1->Text做了StrToDate,所以Date不能再和字串相串連。 要先確定你的TxDateTime欄位是什麼Type,若它的Type是 varchar 你直接把Edit1->Text串進SQL字串 若它的Type是 Date 你要用SQL語法把Edit1->Text的字串做 toDate 才可以用 因為不知你的DataBase是什麼,所以我用我熟的Oracle來改寫 ADOQuery1->SQL->Add("SELECT * FROM 交易記錄檔 where TxDateTime >= to_date('" Edit1->Text "','YYYYMMDD') And TxDateTime <= to_date('" Edit2->Text "'','YYYYMMDD')"); 其中的to_date('XXX','YYYYMMDD') 是Oracle的 SQL Function 不是BCB的Function唷,若你用的是其他的DataBase此Function是不一樣的唷
jay26tw
一般會員


發表:8
回覆:8
積分:3
註冊:2004-02-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-05 17:05:58 IP:61.30.xxx.xxx 未訂閱
我是用Access 該型態為DateTime 因為有加入時間 並且用BCB標準語法轉換為時間StrToDate(Edit1->Text) 所以不知如何改寫才是對的 頭髮快抓光了=.= 我是新手,但不是永遠的新手 只要努力不懈,相信成功就在眼前
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-05 17:30:51 IP:211.20.xxx.xxx 未訂閱
試了一下 在Access中要用 Cdate('2004/03/03') 來轉換 ADOQuery1->SQL->Add("SELECT * FROM 交易記錄檔 where TxDateTime >= cdate('" Edit1->Text "') And TxDateTime <= cdate('" Edit2->Text "')"); 但是你 Edit1->Text 裡面的資料格式必須是 YYYY/MM/DD 若沒有 / 符號,它就不會轉了唷~~
jay26tw
一般會員


發表:8
回覆:8
積分:3
註冊:2004-02-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-05 18:33:04 IP:61.30.xxx.xxx 未訂閱
我雖然還沒解決問題還在 但是已經有個方向 我會想辦法解決的 我先把我現在的程式貼出來 還是有問題的版本 --------------------------------------- DataBase TxDateTime => 2004/3/5 下午 03:30:52<----不知是不是跟時間有關 [日期/時間] --------------------------------------- 程式會直接跳到最後的catch(...) =========================================================== void __fastcall TmIssueLog::Button1Click(TObject *Sender) { try { if((Edit1->Text)=="" || (Edit2->Text)=="") { ShowMessage("日期輸入不完整"); Edit1->SetFocus(); } else { ADOQuery1->Active = false; ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("SELECT * FROM 交易記錄檔 where TxDateTime >= cdate(''" Edit1->Text "'') And TxDateTime <= cdate(''" Edit2->Text "'')"); ADOQuery1->Active = true; } } catch(...) { ShowMessage("輸入日期格式有誤"); } } 我是新手,但不是永遠的新手 只要努力不懈,相信成功就在眼前
系統時間:2024-04-29 16:09:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!