TTable.FindKey()和Locate()的問題請教 |
缺席
|
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
引言:是這樣的,我對一個TTable設定了IndexFieldNames(Primary Key) 用FindKey的話無法讓Cusor指到要找的那筆,用Locate則可。 且在Post 或者Refresh之後,Cursor會指向Table的第一筆, 即使在AfterRefresh 或者AfterPost之後Locate也是一樣。 不知道這是怎麼回事? Locate 方法可以不必先 Tabel.colse; begin FindSuccess := Table.Locate('CustNo',Edit.Text, [loPartialkey]); end; FindKey 方法 begin Table1.Close; Table1.IndexFieldNames :='CustNo'; Table1.Open; FindSuccess := Table1.FindKey([Edit1.Text]) end;loCaseInsensitive :不分大小寫 loPartialKey :資料只要部份符合 希望對你有幫助... 發表人 - leo2568 於 2003/11/27 17:44:06 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 可能是Locate部分的程式問題吧﹗ 當資料表Close再Open或者Refresh后﹐資料錄指針就會移到當前資料表的首筆資料錄﹐這是一個資料表操作方法的觀念﹒ 如果所使用資料表的筆數不是很多﹐當Close&Open或者Refresh后﹐指針移到首筆記錄(印象中﹐Post之后應不會﹐找時間試一試)﹐對使用者而言還不至于太為困扰﹐但如果資料表中的資料錄筆數已經很多﹐夸張一些來講﹐甚至已經上萬筆﹐在操作過程中﹐指針突然移到首筆的反應對使用者而言﹐真的是一個大困扰了﹐所以說﹐您所提到的Locate查詢﹐就是解決這個困扰的好方法了﹒ Locate方法有帶三個參數﹐一般來講第一個參數我們都會使用鍵值欄位名﹐以達到查詢的准确性及提高效率﹐但需要記錄下之前指針位置所對應的鍵值欄位值﹐您可將以下程式碼寫在DataSource元件的OnDataChange事件中﹐目的是在指針移動時即時記錄下鍵值欄位值(注﹕先做變數宣告在Form1宣告之后)﹕
Var Form1 : TForm1; Remark : String; //先將變數宣告在此處﹐以使所有的程式中都能使用 begin Remark := ADOTable1.FieldByName('鍵值欄位名').AsString; end;而后﹐即可在影響指針移動的方法之后加上Locate查詢(比如說Close&Open)﹕ begin ADOTable1.Close; ADOTable1.Open; ADOTable1.Locate('鍵值欄位名', Remark, []) ; end;參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/11/27 17:54:40
------
忻晟 |
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |