0

得到一个具有 OnNewRecord 事件的 ADOQuery。

在该过程中,我尝试将数据自动添加到另一个表中。在取消的情况下,数据是需要在 clientDataSet 中处理的几行。

在当地

其他AdoQuery.insert;

我收到 ADOQuery 未能将 null 插入非 null 字段的错误。我处于插入模式,但我从未要求 DELPHI 发布!我不明白它为什么发帖。

编辑:你能帮我找到这个问题的提示吗?

更多说明:

ADOQuery.onNewRecord();

开始

客户数据集.插入;//这里是为 ADOQueryPost 发布的。ClientDataSet 处于浏览状态的位置

结尾;

编辑:

这个错误没有意义!查看堆栈跟踪:

  • 事前事后
  • 新纪录
  • 我的函数

其中 myFunc 确实会导致带有插入的 NewRecord。

4

2 回答 2

2

我对 TAdoQuery 不太熟悉,但我知道如何追踪这样的错误。首先,如果您还没有设置它,请进入项目选项并在编译选项卡下打开使用调试 DCU,然后运行完整的构建并运行它。当您在调试器中获得该异常报告时,点击 Break 并且您应该最终进入 TAdoQuery 或其子对象之一的代码。尝试检查调用堆栈。如果您查找一些调用,您可能会发现您所做的某件事正在调用其他调用 Post 的方法。跟踪堆栈跟踪,直到你到达你的代码,你就会知道发生了什么,如果你稍微分析一下,你应该找到一些方法来防止这个问题。

话虽如此,让我快速猜测一下您的问题的原因:当您在数据集上调用 Insert 时,如果数据集已经处于附加模式,因为您之前调用了 Insert 或 Append 并且没有跟进 Post ,它会在设置新行供您处理之前调用 Post 本身。也许这就是发生在你身上的事情?

于 2010-10-14T16:18:11.827 回答
-1

答案来自表之间的连接。

ADOQuery.dataSource 被设置为ClientDataSet 的DataSet。

这狂的伤害太大了,delphi也没有提示。

于 2010-10-18T11:08:42.870 回答