0

我在主/详细模式下的数据集有问题。

我正在使用带有更新 1、DBExpress 和 Firebird 2.5.2 的 Delphi XE 我在两个表 (CDS) 之间有一个主/从关系,它使用主源/主域属性定义。

我的问题是,当我删除详细数据集中的所有记录并编辑主 ClientDataset 后,当我在 Detail ClientDataSet 中调用 CancelUpdates 方法时,我收到“密钥违规”异常。

此问题仅发生在详细数据集为空的情况下。

任何人都知道可能是什么问题?

编辑: 人们,我在我的框架中解决了“密钥违规”的问题。不确定是什么导致了问题,所以我暂时隔离了异常。

在同样的结构中,还有另一个问题,在这种情况下似乎是一个 Bug 的 DBExpress。

在下面的链接中,我创建了一个示例来模拟问题。

http://www.4shared.com/zip/gmT7GVPf/MestreDetalheBug.html

如何模拟问题:

1) 选择一个主记录;
2)在网格详细信息中,删除所有记录,但不保存。仅由 DbNavegador 删除。
3)继续网格主并更改主记录的任何值。您将看到记录详细信息网格重新出现详细信息。
仅当 DataSet Detail 为空时才会出现此问题。

我有一个框架,可以维护对缓存在工作台上的记录的所有更改,并且仅在用户单击“保存”按钮时才有效。找了一阵子的解决方法,就是在删除的时候在明细记录里面,已经在数据库里生效了。

有什么帮助吗?

4

1 回答 1

-1

我在 Delphi 2009 中遇到了同样的问题。我只是关闭并重新打开 DataSet Detail 而不是使用 CancelUpdates 来清除更改。但我希望有一些更好的解决方案。

谢谢。

于 2018-08-10T06:37:29.523 回答