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

資料庫查詢

尚未結案
sucm
一般會員


發表:24
回覆:29
積分:10
註冊:2005-01-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-11 13:34:24 IP:211.78.xxx.xxx 未訂閱
請問各位大大 我的資料庫是sql2000 要如何做到各個欄位查詢呢 感謝各位大大 我是新手...請原諒我的笨問題
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-11 14:37:43 IP:202.62.xxx.xxx 未訂閱
您好﹗    一般來講﹐有兩種較常使用的方法可對資料庫進行查詢﹕ 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-11 20:29:00 IP:61.64.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-14 22:22:31 IP:61.62.xxx.xxx 未訂閱
嗯....感謝各位前輩的回答.. 二位的回答我覺得都很好用... 可是因為cashxin2002版主的方式我比較能接受.. 所以得分就只好給cashxin2002版主了.... 感謝各位... 我是新手...請原諒我的笨問題
系統時間:2024-06-27 3:14:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!