【问题标题】:insert to a different table onNewRecord插入到不同的表 onNewRecord
【发布时间】:2010-10-14 15:53:40
【问题描述】:

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

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

就地

OtherAdoQuery.insert;

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

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

更多说明:

ADOQuery.onNewRecord();

开始

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

结束;

编辑:

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

  • 事后
  • 新记录
  • myFunc

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

【问题讨论】:

  • 没有必要投票关闭它。它可能没有以最好的方式表达,但很清楚他想要帮助的 OP 的问题是什么。
  • AdoQuery 不支持批量更新/插入。在能够处理另一个插入或编辑调用之前,它需要一个帖子。此外,如果您的 OtherAdoQuery 连接到 ClientDataSet,则帖子将发送到 ClientDataSet,而不是数据库本身(至少在您使用批量更新时)。

标签: delphi events tadoquery tadotable


【解决方案1】:

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

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

【讨论】:

  • 我觉得不错。 ADOQuery 不支持批量插入,并且必须先进行发布,然后才能处理第二次插入。另一方面,我希望它在第二次插入时引发异常......但也许那是几个 ADO 版本:-)
  • delphi 7 adodb 版本。我使用 eruka 日志,将 delphi 作为主要的错误抛出器和处理程序。星期天我检查一下。谢谢
  • ClientDataSet 处于浏览状态并将其设置为插入。
【解决方案2】:

答案来自表之间的连接。

ADOQuery.dataSource 被设置为 ClientDataSet 的 DataSet。

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

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多