主表移动,从表记录复制一次,急寻答案,分可以再加(300分)

  • 主题发起人 ericyeoh
  • 开始时间
E

ericyeoh

Unregistered / Unconfirmed
GUEST, unregistred user!
MIDAS体系,DCOM连接
客户端两个ClientDataSet通过MasterSource连接为主从表结构
问题:
若当前主表记录A有从记录12两条,则主表记录指针移动到一条没有从记录的记录B上后
再移回记录A时,它对应的从记录就将原纪录复制一次成为1212共四条。
再如此操作,还会继续复制记录,十分讨厌。
但如果主表记录对应从表都有记录时,不会有此问题。
 
>两个ClientDataSet通过MasterSource连接?
看看这样解不解决问题:
做2个ClientDataSet+2个Source
主表创建久一字段,属性应指向从表DATASET
设置其DATASETFIELD到主表
 

嵌套的数据集(巢状数据集)
《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上的所有改变(包括细数据集),返回给数据库。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部