每key in一個值,database便開始過濾... |
尚未結案
|
okeyla
一般會員 發表:51 回覆:20 積分:19 註冊:2003-06-12 發送簡訊給我 |
|
franksyon
一般會員 發表:5 回覆:10 積分:3 註冊:2003-05-30 發送簡訊給我 |
如果這樣的話,我想用SQL的的語法也許可以
假設你的資料庫名稱是 USER.DB 人名那個欄位是 NAME ,
你的Edit->Text 目前是空值
那你在你Edit的OnKeyPress裡面寫著
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("select * from user.db where NAME like '" Edit1->Text "%';");
Query1->Open();
看看可不可以,這是我的笨方法 ^^"
|
okeyla
一般會員 發表:51 回覆:20 積分:19 註冊:2003-06-12 發送簡訊給我 |
|
franksyon
一般會員 發表:5 回覆:10 積分:3 註冊:2003-05-30 發送簡訊給我 |
首先作個測試
建立一個表單
拉一個Database1,Query1,DataSource1,DBGrid1,Edit1
然後將Database1 的 DatabaseName 設 test
AliasName 設 BCDEMOS
將Query1 的 DatabaseName 設 test
將DataSource1 的 DataSet 設 Query1
將DBGrid1 的 DataSource 設 DataSource1
然後在Edit1 的事件 OnKeyUp
加入下列語法
void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("select * from employee.db where LastName like '" Edit1->Text "%' ;");
Query1->Open();
} 再來你執行此程式,在Edit1 上面打字看看..
應該可以的...try try 看
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
引言: 首先作個測試 建立一個表單 拉一個Database1,Query1,DataSource1,DBGrid1,Edit1 然後將Database1 的 DatabaseName 設 test AliasName 設 BCDEMOS 將Query1 的 DatabaseName 設 test 將DataSource1 的 DataSet 設 Query1 將DBGrid1 的 DataSource 設 DataSource1 然後在Edit1 的事件 OnKeyUp 加入下列語法 void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift) { Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add("select * from employee.db where LastName like '" Edit1->Text "%' ;"); Query1->Open(); } 再來你執行此程式,在Edit1 上面打字看看.. 應該可以的...try try 看小弟插個花, 我想這個方法應是可行, 但是不知有沒有漂亮一點的作法, 如果要這樣做的話, loading 是不是太大了一些. (近 2 個月半月第一次發言, 快被操死了). Jesse Chan
------
Jesse Chan |
franksyon
一般會員 發表:5 回覆:10 積分:3 註冊:2003-05-30 發送簡訊給我 |
恩...其實也還有一個方法...
就是首先,先用一個Lstbox1 把LastName的所有欄位寫過去..
然後由ListBox1裡面的值去尋找...
也就是說用Edit1->Text的KeyPress事件...
去尋找ListBox1的資料,
再把結果顯示到ListBox2裡面...
當你決定好要用看哪個人的詳細資料時,再增加一個Button
Button的事件寫著 Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("select * from employee.db where LastName like '" Edit1->Text "%' ;");
Query1->Open(); 這樣的話,資料庫不會一直Load..也比較快一點
算半即時吧....希望能有改善的情況..
|
okeyla
一般會員 發表:51 回覆:20 積分:19 註冊:2003-06-12 發送簡訊給我 |
引言: 恩...其實也還有一個方法... 就是首先,先用一個Lstbox1 把LastName的所有欄位寫過去.. 然後由ListBox1裡面的值去尋找... 也就是說用Edit1->Text的KeyPress事件... 去尋找ListBox1的資料, 再把結果顯示到ListBox2裡面... 當你決定好要用看哪個人的詳細資料時,再增加一個Button Button的事件寫著 Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add("select * from employee.db where LastName like '" Edit1->Text "%' ;"); Query1->Open(); 這樣的話,資料庫不會一直Load..也比較快一點 算半即時吧....希望能有改善的情況..您介紹的方法也挺不賴的,但是衍生出另一個問題... 題外的問題: "先用一個Lstbox1 把LastName的所有欄位寫過去"<--- 若此欄位有重複,該怎麼過濾掉呢??? |
franksyon
一般會員 發表:5 回覆:10 積分:3 註冊:2003-05-30 發送簡訊給我 |
嗯...問的好...這個問題我之前在學PHP的時候有學到一個東西
那個叫做IndexOf()
這個嗎..會回傳一個int的值
用法是,如果字串中,要尋找的字串如果有在這個字串中的話,會回應一個int值
這個值的意思,就是尋找的字串,在來源字串中的起始位置
例如: ListBox1的列表如下
111
222
333
444
555
666
要尋找的字串如下
String Find1="333";
用int a=ListBox1->IndexOf(Find1);
會回傳 a=6;
如果尋找的字串不在ListBox1中的話,會回傳 -1的值
例如:
String Find2="123";
int a=ListBox1->IndexOf(Find2);
會回傳 a=-1;
代表ListBox1 裡面沒有相同的資料,會傳回-1的值
所以也就是說,當你要把欄位的資料寫到ListBox1的時候,
if(ListBox1->IndexOf(Find)==-1){
增加到ListBox1中
}
這樣不知懂了沒..我懶的在打語法了,希望對你有幫助喔...
try try it.....
祝好運...
|
franksyon
一般會員 發表:5 回覆:10 積分:3 註冊:2003-05-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |