資料庫搜尋的程式碼問題 |
尚未結案
|
tv66
一般會員 發表:5 回覆:3 積分:1 註冊:2004-03-30 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 一般來講﹐資料庫的查詢方法可分成普通查詢﹐過濾和SQL語法查詢三種﹐基于您的問題﹐此三種方法皆可﹐看您使用何種資料集元件吧﹒
若是使用Table等無SQL語法功能的資料集元件﹐可使用Locate; LookUp; SetKey三種較常用的方法﹐在這三種方法中﹐就您的問題而言﹐因為是單欄位的查詢﹐故Locate方法較為适合﹐相關的使用方法如下﹕
begin Table1.Locate(ComboBox1.Text, Edit15.Text, [loCaseInsensitive]; end;資料集元件需在開啟狀態才可進行查詢﹐當查詢到資料的時候﹐資料錄指針就會指向此筆資料錄﹐loCaseInsensitive參數是指查詢中不分大小寫﹐另外還有一個loPartialkey的參數﹐其意義是只要部分資料符合﹐此筆資料就算符合﹒也可參考Delphi中的Help 若是使用Query等支援SQL語法功能的資料集元件﹐可直接使用SQL查詢語句來進行查詢﹐相關的使用方法如下﹕ begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select * From 資料表 Where FieldTemp '); Query1.SQL.Add('= ''' ComboBox1.Text ''''); Query1.SQL.Text := StringReplace(Query1.SQL.Text, 'FieldTemp', ComboBox1.Text, [rfReplaceAll, reIgnoreCase]; Query1.Open; end;此時只有符合SQL查詢條件的資料才會顯示出來﹐即如果您的DBGrid元件正确通過DataSource元件連接到此Query元件﹐符合查詢條件的資料即會在DBGrid元件中顯示出來﹒ 至于過濾方法(Filter)﹐也可配合DBGrid元件將過濾后的資料顯示出來﹐不符合過濾條件的則不顯示﹐方法如下﹕ Var Str : String; begin Try Table1.Filtered := False; Str := ComboBox1.Text '=' Edit15.Text; Table1.Filter := Str; Table1.Filtered := True; Except ShowMessage('過濾條件錯誤'); Table1.Filtered := False; end; end;========================= 大病初愈﹐休養調整中... =========================
------
忻晟 |
tv66
一般會員 發表:5 回覆:3 積分:1 註冊:2004-03-30 發送簡訊給我 |
感謝版主的回應~ 我輸入下列的程式碼
可是搜尋不到任何東西~
請問是不是我的語法有輸入錯誤呢? procedure TFTC1.Button1Click(Sender: TObject);
begin
dm.CU1Query.Close;
dm.CU1Query.SQL.Clear;
dm.CU1Query.SQL.Add('Select * From CU1.db Where ' Edit15.Text ' ');
dm.CU1Query.SQL.Add('= ''' ComboBox1.Text '''');
dm.CU1Query.SQL.Text := StringReplace(dm.CU1Query.SQL.Text, Edit15.Text ,ComboBox1.Text, [rfReplaceAll,rfIgnoreCase]) ;
dm.CU1Query.Open;
end; 我之後修改成下列後
雖然是能搜尋了~但是卻不知道如何做特殊條件搜尋(大小寫,多筆條件) procedure TFTC1.Button1Click(Sender: TObject);
begin
dm.CU1Query.Close;
dm.CU1Query.SQL.Clear;
dm.CU1Query.SQL.Add('Select * From CU1.db Where ' ComboBox1.Text '= ''' Edit15.Text '''');
dm.CU1Query.Open;
end; 最後~
我也試了用locate試了一下 table1.locate(ComboBox1.Text,Edit15.Text,[loCaseInsensitive, loPartialKey]); 請問這樣的語法有錯誤嗎~?~
還有Table要怎麼用呢?
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
抱歉 插個花
LOCATE方式搜尋資料時 cashxin2002兄已有說明loCaseInsensitive與loPartialKey的使用時機
以SQL方式來作
'Select * From CU1.db Where ' ComboBox1.Text '= ''' Edit15.Text ''' And ' Conbobox2.Text ' = ''' Edit16.Text ''' ';
你可依照需求來選擇使用And 或OR的方式及條件中LIKE與 = 的用法.建議你可買本有關DELPHI資料庫方面的參考書籍. =========================
讀萬卷書~不如來K.TOP走一遭
=========================
|
jbinfo
一般會員 發表:9 回覆:25 積分:16 註冊:2004-05-10 發送簡訊給我 |
tv66兄你好:
多筆查詢的部份,或許可以參考一下這樣子的寫法
procedure TFTC1.Button1Click(Sender: TObject);
var
SQLText,s:String;
begin
s:='N';
SQLText:='Select * From CU1.db';
if (ComBox1.Text<>'') AND (Edit15.Text<>'') then
begin
s:='Y';
SQLText:=SQLText Format('Where %s=''%s''',[ComBox1.Text,Edit15.Text]);
end;
if (ComBox2.Text<>'') AND (Edit16.Text<>'') then
begin
if s='Y' then
SQLText:=SQLText Format(' AND %s=''%s''',[ComBox2.Text,Edit16.Text])
else
SQLText:=SQLText Format('Where %s=''%s''',[ComBox2.Text,Edit16.Text]);
end; with dm do
begin
CU1Query.Close;
CU1Query.SQL.Clear;
CU1Query.SQL.ADD(SQLText);
CU1Query.Open;
end;
end; 不知道這樣對你有沒有幫助
|
tv66
一般會員 發表:5 回覆:3 積分:1 註冊:2004-03-30 發送簡訊給我 |
感謝likush跟jbinfo兩位版友的回應~ 試過之後目前能跑成功的只有
dm.CU1Query.SQL.Add('Select * From CU1.db Where ' + ComboBox1.Text + '= ''' + Edit15.Text +''' And '+Combobox2.Text+ ' = '''+Edit16.Text+''' ');
請問用SQL的話能做到loCaseInsensitive與loPartialKey的功能嗎? 關於jbinfo版友所寫的~
我輸入條件後按搜尋
結果跑出下面訊息~
請問是哪裡的問題呢?
procedure TFTC1.Button1Click(Sender: TObject);
var
SQLText,s:String;
begin
s:='N';
SQLText:='Select * From CU1.db';
if (ComboBox1.Text<>'') AND (Edit15.Text<>'') then
begin
s:='Y';
SQLText:=SQLText + Format('Where %s=''%s''',[ComboBox1.Text,Edit15.Text]);
end;
if (ComboBox2.Text<>'') AND (Edit16.Text<>'') then
begin
if s='Y' then
SQLText:=SQLText + Format(' AND %s=''%s''',[ComboBox2.Text,Edit16.Text])
else
SQLText:=SQLText + Format('Where %s=''%s''',[ComboBox2.Text,Edit16.Text]);
end; with dm do
begin
CU1Query.Close;
CU1Query.SQL.Clear;
CU1Query.SQL.ADD(SQLText);
CU1Query.Open;
end;
end;
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |