資料庫查詢 |
尚未結案
|
sucm
一般會員 ![]() ![]() 發表:24 回覆:29 積分:10 註冊:2005-01-17 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 一般來講﹐有兩種較常使用的方法可對資料庫進行查詢﹕
1. 資料集元件的搜索方法
較常用的資料集元件的搜索方法有Locate﹑Lookup﹑SetKey等
各種方法皆有不同的特性和其所較适用的環境﹐其範例分別如下﹕
Locate方法﹐較适用于單欄位的搜索﹐回傳值形態為Boolean begin if ADOTable.Locate('欄位名', 搜索值, [loCaseInsensitive, loPartialKey]) then //loCaseInsensitive和loPartialKey為搜索參數﹐意義分別為字母不分大小寫和只要部分資料符合﹐此筆資料就算符合 ShowMessage('找到您搜索的資料') else ShowMessage('無相符資料'); end; //Locate方法回傳一個Boolean值﹐搜索到結果回傳True﹐并將當前資料錄指針移至搜索結果對應的資料錄上﹐未搜索到結果回傳False﹐資料錄指針不做移動 Lookup方法﹐較适用于多欄位的搜索﹐傳回值單一或多個欄位值﹐回傳值形態為Variant Array Var FindResult : Variant; Str : String; begin FindResult := ADOTable1.Lookup('欄位名1;欄位名2'), VarArrayOf([搜索值1,搜索值2]), '回傳欄位名'); if Not VarIsNull(FindResult) then begin Str := '您搜索的資料如下﹕' + #10#13; Str := Str + VarToStr(FindResult) + #10#13; end else begin Str := '無相符合的資料錄'; end; ShowMessage(Str); end; //Lookup方法搜索方法不會使資料錄指針移動2. 使用支援SQL語法的資料集元件﹐配合SQL查詢語句對資料庫進行查詢 SQL查詢語句較有效率﹐和之前所述的搜索方法相比較﹐在資料庫內容較大的情況下﹐很容易就可以比較出SQL查詢語句的效率是遠遠超過搜索方法的﹐範例如下﹕ begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From 資料表 Where 欄位名 = 查詢值'); ADOQuery1.Prepared := True; ADOQuery1.Open; end;在SQL查詢語法中的Where子句﹐即是條件式的區域﹐可使用And或Or將各條件做"和"与"或"的結合﹐在Open前將Prepared屬性設為True﹐有助于提高SQL查詢語句執行的效率﹒供您參考﹗ =================================
------
忻晟 |
hello
初階會員 ![]() ![]() 發表:64 回覆:68 積分:31 註冊:2004-05-08 發送簡訊給我 |
sucm 你好:
以下是我進行多欄位查詢所用的方式,你參考看看:
主程式: ... var ary1 : string; begin ary1 := 'select * from 客戶主檔 where 1 = 1 '; ary1 := ary1 sql('客戶電話',tel.text); ary1 := ary1 sql('客戶姓名,name.text); ... clientdataset1.close; clientdataset1.datarequest(ary1); //<----會依使用者所輸的各項資料進行"and"的模糊查詢 clientdataset1.open; ... end; function Tform1.sql(p_field:string;p_keystr:string):string; var temp_str : string; begin temp_str := ''; if p_keystr <> '' then begin temp_str := ' and ' p_field ' like ' chr(39) p_keystr '%' chr(39); end; result := temp_str; end; |
sucm
一般會員 ![]() ![]() 發表:24 回覆:29 積分:10 註冊:2005-01-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |