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

Locate資料問題

尚未結案
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-10 11:34:12 IP:202.181.xxx.xxx 未訂閱
請問我使用Locate去搜尋資料,假設符合條件的資料有5筆, 當我Locate道第一筆符合條件的資料時,cursor會移到此筆資料, 請問我要如何讓他繼續搜尋,直到所有符合條件的資料都被找到??
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-10 12:14:54 IP:61.221.xxx.xxx 未訂閱
你好: whlie not Grid.Eof do if DBGrid1.Columns.Grid.Fields[i].AsString = '就是這樣~喵' then i要自己定義 發表人 - ko 於 2003/06/10 12:30:19
------
======================
昏睡~
不昏睡~
不由昏睡~
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-10 13:33:22 IP:202.181.xxx.xxx 未訂閱
我是使用Table去搜尋資料,不是Grid 而且我有一個疑問,當table locate到資料時,會繼續再往下搜尋嗎?? 還是又回到第一筆??
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-10 14:07:46 IP:203.95.xxx.xxx 未訂閱
locate 只會找出第一筆符合條件的資料, 若是要再往下找的話, 還是要自己寫 function 才行!!
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-10 15:06:37 IP:202.181.xxx.xxx 未訂閱
請問先進,如果我想繼續往下搜尋,Function要如何寫會比較有效率?? 請指點一下,謝謝
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-10 15:16:43 IP:203.95.xxx.xxx 未訂閱
若資料量不大的話, 可以這樣寫, 試試看. 不過只有單一欄位有效, 要多欄位的話, 請再自行改寫一下.  第一個參數是你的 dataset, 最後一個參數是是否要檢查目前這一筆. 試試看是不是符合你要的. 這是一筆一筆往下比對的方式進行的!    
function myLocate(dataset: TDataSet; const KeyFields: String; const KeyValues: String; Options: TLocateOptions;
checkCurrent: Boolean = true): Boolean;
var
  cur: TBookMark;
  oristr, compstr: string;
begin
  cur := dataset.GetBookmark ;
  Result := false;
  if not checkCurrent then dataset.Next;
  while not dataset.Eof do
  begin
    if loCaseInsensitive in Options then
    begin
      oristr := UpperCase(dataset.FieldByName(KeyFields).AsString);
      compstr := UpperCase(KeyValues);
    end
    else
    begin
      oristr := dataset.FieldByName(KeyFields).AsString;
      compstr := KeyValues;
    end;
    if loPartialKey in Options then
    begin
      if Copy(oristr, 1, length(compstr)) = compstr then
      begin
        Result := true;
        break;
      end;
    end
    else
    begin
      if oristr = compstr then
      begin
        Result := true;
        break;
      end;
    end;
  end;
  if Result = false then
    dataset.GotoBookmark(cur);
end;
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-11 03:08:51 IP:61.66.xxx.xxx 未訂閱
引言: 請問先進,如果我想繼續往下搜尋,Function要如何寫會比較有效率?? 請指點一下,謝謝
你必須要這樣下法 (假設要找姓名 "陳" 開頭的) Table1.Filtered:= false; Table1.Filter:= 'NAME =''' '陳*'''; // sring= NAME="陳*" Table1.open; // 第一次以 LOCATE找 Table1.locate('name','陳',[lopartialkey]); 另外弄一個 BUTTON2 寫 if not Table1.FindNext then ShowMessage('Not found') 就可以達到你的需求 但因為此法並未使用到索引, 因為資料庫過大會影響速度甚巨!
系統時間:2024-05-20 7:12:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!