怎样对子表进行Filter操作?(100分)

  • 主题发起人 主题发起人 A00A00
  • 开始时间 开始时间
A

A00A00

Unregistered / Unconfirmed
GUEST, unregistred user!
两个表都是AdoDataSet
MasterTbl(select * from orders where orderid=:orderid)
DetailTbl(select * from order_detail where orderid=:orderid)
它们之间用 "DataSource" 连接,"DetailTbl" 的 "DataSource" 为连接到
"MasterTbl" 的 "MasterDataSource"
因为子表的纪录太多, 有时用户想从明细表中选出部分纪录出来,我想用filter应
应该快些(因为它不用再到服务器取数据),但它提示不能在Detail table上进行这样
的操作.不知大家有没有好的方法.
 
我总是用SQL,当然要以MASTER的某字段做参数
 
设置CACHSIZE为你想要的在小就可以!
 
to donkey:
这样不是要再生成再向Server请求数据。如果筛选次数多的话会不会影响速度,我
举的Select语句是为方便理解随便举的,事实的子表的纪录量很大(Ex:Bom)我不想总向
Server要数据.
to hpretty:
我不是很清楚.您可以再详细些吗?
thanks!
 
为什么用FILTER?直接用SQL不能解决吗?
 
我真实的想法是想在已下载到客户端的数据集中进行Filter,
我的想法是这时是对内存表进行操作,速度应该较快,
也可以减少网络压力.
不知我的想法是否正确,
请各位高手指点.
Detail表不能Filter的话,有没有变通的方法呢?
% ?-? %
 
FILTER肯定可以,可能是你使用不当吧!
 
可以限制从服务器返回的数据的量的,你可以参考李维的书。好象我记得用FILTER是返回
所有的数据的,数据量很大。其实你可以在服务器端设定规则的,这样返回的量就不大了
 
To All:
我去看看李维的书,待会再来
 
DetailDS.filter :='orderid='+masterDS.fieldbyname('orderid').asstring;
DetailDS.filtered :=true;
 
把DetailTbl中的数据指定给一个TCLIENTDATASET组件
 
我还是没找到一个好办法。
因为我在表用了一些Lookup字段
我想要在表中可以对这些Lookup字段也可以进行筛选
而我有些字段是不显示的,有些字段是计算型的
重新生成SQL太难控制了
 
直接用TADODataSet的Filter属性是不行的!
但可以在TADODataSet的OnFilterRecord事件中做!

这里我想可能是ADO与BDE两种数据访问方式的差异!
ADO的Filter事件好用,而BDE是OnFilterRecord事件好用,
TADODataset兼有二者优点.
 

Similar threads

后退
顶部