【问题标题】:The Master/Detail Behavior主/细节行为
【发布时间】:2010-10-24 01:28:55
【问题描述】:

我使用Delphi 7 + Zeos + MySQL,当我尝试发布主表时遇到问题,首先发布详细信息数据集,引发数据库中的引用完整性异常,'因为详细信息表需要ID主表。

我可以恢复这种行为吗?我可以在细节之前持久化主表吗?

【问题讨论】:

  • 没有必要这样做,这是默认行为,每次我尝试使用这种方式时都会遇到同样的问题。

标签: delphi dataset


【解决方案1】:

我认为这正是TDataSet 的工作方式。如果您有未发布的详细记录,如果我没记错的话,master.Post 会强制它们到Post

所以我猜你有类似的东西:

tblMaster.Insert;
tblMaster.FieldByName('foo').Value := 'foo';
tblDetail.Insert;
tblDetail.FieldByName('bar').Value := 'bar';
tblMaster.Post; // error!
tblDetail.Post;

您应该可以通过先发布 master 来解决此问题:

tblMaster.Insert;
tblMaster.FieldByName('foo').Value := 'foo';
tblMaster.Post;
tblDetail.Insert;
tblDetail.FieldByName('bar').Value := 'bar';
tblDetail.Post;

【讨论】:

  • eed3si9n,感谢您的回答,确定这是完成工作的一种方式,但它不适用于这种特定情况,事实上,我使用这种方法作为拐杖,但它不正如我将向您展示的那样,它不能解决真正的问题:我有一个表单,它执行两个不同表的接口,一个基表和一个具有更详细字段的补充表。对于用户来说,只有一件事,他们只需要按一个“保存”按钮。
  • 我正在尝试以一种姑息的方式跳过它,但我没有杀死解决方案:我制作了一个组件,当主表中发生插入时,它会禁用详细信息表和将输入数据缓存在基于内存的数据集中,当在 post master 之后,它启用详细信息并将内存缓存的数据复制到持久数据集中。与两个表一起工作正常,我正在尝试增强它以仅与两个表一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2013-08-25
相关资源
最近更新 更多