用了FILTER后原先的结果集是否改变了在线等候?(50分)

  • 主题发起人 主题发起人 hthugm
  • 开始时间 开始时间
H

hthugm

Unregistered / Unconfirmed
GUEST, unregistred user!
我从数据库中把所有记录都取出来,用Filter过滤如:Fileter:=‘字段a=**’
得到一个结果集,在这里我怀疑原先的结果集变成过滤后的结果集,然后我再用
Fileter:=‘字段b=**’再过滤是否有用吗?
 
结果集并没有减少,只是不显示出来。
不知道你用过FOXBASE没有,FILETER 和 FOXBASE中的SET FILT TO 效果一样。
 
Fileter:=‘字段b=**’再过滤有用仍然有用,道理正如楼上所说。
 
to Kingdeezj:
我用Fileter:=‘字段a=**’过滤后你说结果集并没有减少,只是不显示出来
[red]哪它把这过滤结果集放在哪[/red]而且用AdoQuery['字段a']得到的是
子集的数据,然后我用Fileter:=‘字段b=**’再过滤它在最先的结果集过滤吗?
 
用了FILTER后,显示出来的是子集,FIRST,EOF等操作都会只局限于子集。
 
FILTER 子句实质应该是调用了SQL 语句,第一次调用Fileter:=‘字段a=**’,将Filtered:=true;后返回一个满足条件的子集;
紧接着调用Fileter:=‘字段b=**’并将Filtered:=true;时相当于又写了一句全新的SQL,所以第二次返回的结果并不是在第一次的的子集中再过滤,而是从整个表中进行过滤。
 
To TMXYB:
你是这样理解的我看简直有点不可思议,认为不是写全新的SQL语句如果是相当于写全新
SQL语句速度能提高吗?望高手指教.
 
本来 用Filtered语句就不会对提高查询速度有太大的帮助,你可以自己写代码来验证这一点。另外,我不推荐您用Filtered来查询数据,因为使用他效率太低。
 
to Tmxyb
FILTER 子句实质应该是调用了SQL 语句如果是写全新的SQL语句,
哪宝兰公司提供FILTERED是做什么用的,吃多了没事干.
如果一个库有200000000000条记录,开库本来就慢了,如果我多次查询要多次开库的话
我想用户是不满意的。
 
你测试过没有?如果没有,你应该做一个简单的例子,你就知道这一点了。而且我并没有说宝兰公司提供FILTERED 函数是无用的,相反在数据相对较少的桌面数据库中,它仍然简单实用。但对大型的数据库而言,效率之差,难以想象。直接写SQL语句进行查询一直是保持高效率的方法。
 
to:hthugm
现有李维的《delphi 5.x ADO/MTS/COM+....》中资料进行参考,P80~P90 页详细讲解了Filter 的用法和弊端,建议参考。
 
同意kingdeezj
 
各位还是没有回答我要问的问题但今天是国庆节散分吧。
 
我要分!该说得大家都说了,就不说了!
 
MichaelZhu说的就是对的了
 
问题太简单,分数平分
 

Similar threads

D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
后退
顶部