Locate資料問題 |
尚未結案
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
若資料量不大的話, 可以這樣寫, 試試看. 不過只有單一欄位有效, 要多欄位的話, 請再自行改寫一下.
第一個參數是你的 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 發送簡訊給我 |
引言: 請問先進,如果我想繼續往下搜尋,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') 就可以達到你的需求 但因為此法並未使用到索引, 因為資料庫過大會影響速度甚巨! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |