插入到NewRecord上的另一个表

时间:2010-10-14 15:53:41

标签: delphi events tadoquery tadotable

获得了一个具有OnNewRecord事件的ADOQuery。

在程序上我尝试自动将数据添加到另一个表。如果取消,数据是在clientDataSet中需要和处理的几行。

在loc

OtherAdoQuery.insert;

我收到ADOQuery无法将null插入非空字段的错误。我在插入模式,但我从来没有要求DELPHI发布!我不知道为什么发布。

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

更多澄清:

at

  

ADOQuery.onNewRecord();

     

开始

     

CliendDataSet.insert; //这里发布ADOQueryPost的帖子。 ClientDataSet处于浏览状态的位置

     

端;

编辑:

这个bug没有意义!看看堆栈跟踪:

  • beforePost
  • newRecord
  • myFunc的

其中myFunc确实导致带有Insert的NewRecord。

2 个答案:

答案 0 :(得分:2)

我对TAdoQuery不太熟悉,但我知道如何追踪这样的错误。首先,如果您尚未设置它,请进入项目选项并在“编译”选项卡下启用“使用调试DCU”,然后运行完整版本并运行它。当您在调试器中获得该异常报告时,请单击Break,您应该最终在TAdoQuery或其子对象的代码中。尝试检查调用堆栈。如果你查了几个电话,你可能会发现你所做的就是调用其他正在调用Post的东西。按照堆栈跟踪回到你的代码,你就会知道发生了什么,如果你稍微分析一下,你应该找到一些方法来防止这个问题。

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

答案 1 :(得分:-1)

答案来自表格之间的联系。

ADOQuery.dataSource设置了ClientDataSet的DataSet。

这种疯狂的伤害,并没有德尔福的暗示。