嵌套的数据集(巢状数据集)
《Delphi 5 开发人员指南》P1125
前言:
开发三层体系的主从表数据录改时,老是遇到主表记录移动,从表记录就复制的问题。李维《系统篇》告诉我用巢状数据集解决问题,可是他就偏偏少说了最关键的一句(向TclientDataset中增加字段),累我试了好久:(。后来终于在《Delphi 5 开发人员指南》找到了答案,感谢上帝,我的问题也解决了。
巢状数据集是三层体系主从表数据录改的一个很好的解决方案。巢状数据集在Delphi5中才引入,其将主从表完全捆绑,大大减轻了程序员在维护主从表所要做的工作。
正文:
要设置嵌套的数据集的关系,必须在服务器端定义主细关系。这和在传统的客户/服务器应用程序中使用的方法相同――即,为细Tquery定义SQL语句,包括链接参数。下面是一个例子:
'Select * from orders where custno=:custno'
然后,为细Tquery的Tquery.Datasource赋值,使它指向一个捆绑到主Tdataset的Tdatasource。设置完它们之间的关系,只需要输出捆绑到主数据集上的TdatasetProvider就可以了。MIDAS知道主数据集上链接了细数据集,因此会把细数据集传送到客户的TDATASETField。
在客户端,把主TclientDataset.ProviderName属性设置为主提供者。然后,向TclientDataset中增加字段。注意字段编辑器中的最后一个字段,它与服务器上的细数据集同名,并定义为TdatasetField类型。这样,在程序中就有足够的信息可以使用。但是,要想使事情更加容易,可以增加一个细TclientDataset,并用主数据集中适当的TdatasetField为属性赋值。一定要注意,这里没有设置细TclientDataset的任何其他属性,像RemoteServer、ProviderName、MasterSource、MasterFields或PacketRecords等。仅设置了DatasetField属性。现在,还可以在细TclientDataset上绑定数据感知组件。
完成了嵌套数据集的设置后,需要应用更新操作返回给数据库。这是通过调用主TclientDataset的Applyupdate方法实现的。MIDAS将在一个事务中应用主TclientDataset上的所有改变(包括细数据集),返回给数据库。