搜尋技巧上的問題 |
答題得分者是:RaynorPao
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
今天的問題也是可以算是討論
我解釋一下意思就資料庫有兩個欄位分別為布、廠牌 然後有兩個輸入數值的地方分別可以搜尋 Edit1->Text -> 布 Edit2->Text -> 廠牌 使用者可以只輸入Edit1或Edit2或是兩個搜尋(Edit1.Edit2)都輸入數值 就能進行搜尋 但是今天有一個大問題就今天有Edit1.Edit2....Edit9共有九個可搜尋空欄 那如果今天還用一下的方法不就要寫2^9=512個組合嗎 我不要用一個搜尋空欄去搜尋資料庫中的所有欄位 有什麼寫法能解決今天的問題嗎 或是其他方法嗎 拜託!拜託! 謝謝! [code cpp] void __fastcall TForm2_1::Button1Click(TObject *Sender) { int Fin=0; if(Edit1->Text=!"") { if(Edit2->Text!="") {Fin=1;} else {Fin=2;} } else { if(Edit2->Text!="") {Fin=3;} else Fin=4;} } ADOQuery1->Close(); ADOQuery1->SQL->Clear(); String C1,C2; C1=Edit1->Text; C2=Edit2->Text; switch(Fin) { case 1: {ADOQuery1->SQL->Add("select * from data where [布]='" C1 "' AND [廠牌]='" C2 "'");break;} case 2: {ADOQuery1->SQL->Add("select * from data where [[布]='" C1 "'");break;} case 3: {ADOQuery1->SQL->Add("select * from data where [廠牌]='" C2 "'");break;} default: {Application->MessageBox("請輸入資料條件","警告",65); return; } } ADOQuery1->Active=true; ADOQuery1->Open(); } [/code] -非常謝謝大大熱心提供你的寶貴意見 謝謝!
------
-謝謝大大熱心的回覆!謝謝! |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
(1)你好像把問題想得太複雜了吧
(2)再仔細想一想,利用程式就可以簡化整個流程 (3)以一個搜尋條件為例: [code cpp] ADOQuery1->Close(); ADOQuery1->SQL->Clear(); AnsiString QueryStr="select * from data"; if(Trim(Edit1->Text)!="") { QueryStr =" where [布]=" Edit1->Text; } ADOQuery1->SQL->Add(QueryStr); ADOQuery1->Active=true; ADOQuery1->Open(); [/code] (4)這樣不管2個條件,或9個條件,應該會寫了吧?(利用 if...else if...else if...動態組合 QueryStr) (5)不過要注意 where 和 and 在 QueryStr 裡面出現的次數
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
|
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
===================引 用 taishyang 文 章=================== 請搜尋本站,關鍵字為[FindComponent] Taishyang 前輩已經提供了不錯的方法
------
Just Do It ------------------------- 其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。 |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
|
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
===================引 用 pceyes 文 章=================== 1. 利用迴圈對form內的元件進行探訪(FindComponent) 2. 若為TEdit時檢查是不是空的 3. 若不為空的,將其加入Sql->Add。 即可動態組成sql語句。 若如果用上面的方式會有一些瓶頸 1.TEdi對應的資料庫欄位都不同 2.該怎麼判斷是要加入where 或 and時機 如果有說錯可能還不懂大大的意思可不可以請大大寫一下程式 -謝謝以上大大熱心的回覆
------
-謝謝大大熱心的回覆!謝謝! |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
提供你參考...
[code cpp] void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Keys[10] = { "Key0","Key1","Key2","Key3","Key4", "Key5","Key6","Key7","Key8","Key9"}; AnsiString s=""; for(int i=0;i<10;i ){ TEdit *e=(TEdit*)FindComponent("Edit" IntToStr(i)); if(e!=NULL&&e->Text.Trim()!=""){ s = e->Text.Trim().sprintf("[%s]='%s' AND ", Keys[i],e->Text.Trim()); } } if(s!="") s="select * from data where " s.SubString(1,s.Length()-5); Memo1->Lines->Text = s; } //--------------------------------------------------------------------------- [/code] |
l90425
初階會員 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
我將taishyang、Raynor、Paopceyes所提供的意見整合後已經做出來了
謝謝以上大大的回覆及其他大大的回覆非常的謝謝你們寶貴的意見! 如果還能有更好的方法請其他的大大繼續提供解答或是有什麼地方還可以改善也請告訴我! 謝謝!謝謝! [code cpp] void __fastcall TForm1::Button1Click(TObject *Sender) { int i=1,a=0; TEdit *tEdit; AnsiString QueryStr="select * from data "; for(i = 1;i<4;i ) { tEdit=(TEdit *)FindComponent("Edit" IntToStr(i)); if(Trim(tEdit->Text)!="") { if(a==0) {QueryStr ="where";a=1;} else {QueryStr ="AND";} if(i==1) {QueryStr =" [溫度]=" tEdit->Text;} else if(i==2) {QueryStr =" [種類] Like '" tEdit->Text "'";} else if(i==3) {QueryStr =" [樹劑]=" tEdit->Text;} } else {} } ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(QueryStr); ADOQuery1->Active=true; ADOQuery1->Open(); Label1->Caption=QueryStr; } [/code] -謝謝大大的熱心回覆!
------
-謝謝大大熱心的回覆!謝謝! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |