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

TADODataSet使用Filter再次过滤资料的问题,请教

尚未結案
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-08 12:36:36 IP:218.104.xxx.xxx 未訂閱
为提高查询速度: TADODataSet第一次使用Filter = 'Age<40'查询出一批数据, 第二次使用Filter='Age<20',此时不要跟数据库有任何关联,能否直接从 第一次TADODataSet的结果中继续查询得到结果?用什么方法?
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-08 13:11:52 IP:218.80.xxx.xxx 未訂閱
Filter本来就是在Local过滤资料的,不会到DB去抓, 还可以在OnFilterRecord事件详细控制     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-09 09:36:36 IP:218.104.xxx.xxx 未訂閱
尽管在内存中操作,然数据量较大时每次都从大笔资料中Filter势必效率较差 如果能够基于前一次Filter的结果,实现增量Filter,可以取得较好的效率 只是不知道如何做?
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-09 10:08:50 IP:218.80.xxx.xxx 未訂閱
你的例子举错了吧,第二次的资料(<20)是第一次的(<40)子集,不是增量。 反过来:第一次<20,第2次>=20且<40 这不能用Filter属性,它是Local的,要用SQL来做: 1.TClientDataSet有AppendData方法,可以把一个Packet加入到另一个 2.ADO
ADO1.LockType:=ltBatchOptimistic;
ADO2.SQL.Text:='....';
ADO2.Open;
while not ADO2.Eof do
begin
  ADO1.Append;
  for i:=0 to ADO2.Fields.Count-1 do
    ADO1.FieldByName(ADO2.Fields[i].FieldName).Value:=ADO2.Fields[i].Value;
  ADO1.Post;
  ADO2.Next;
end;
ADO1.Connection:=nil;
ADO1.UpdateBatch;
ADO1.Connection:=xxx;
ADO1调用UpadteBatch时不连Connection,就不会写DB,并能Merge新增的资料,使他们不为新增状态。
3.BDE你再试试
久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
系統時間:2024-06-28 9:47:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!