gpt4 book ai didi

mysql - 如何知道 ADOQuery.Post 是否会更改数据库?

转载 作者:行者123 更新时间:2023-11-29 20:07:31 31 4
gpt4 key购买 nike

我有一个 Delphi 7 项目,它使用 MySQL 中的数据库来存储一些配置。每当我更改配置时,都会启用“保存”按钮。此按钮中的 OnClick 过程调用 TADOQuery.EditSelect 具有 SQL 属性的字段、TADOQuery.Open并设置各种FieldsByName。最后,它TADOQuery.Post配置并Requery它。

只有当这些字段中至少有一个被实际更改时,这种方法才有效。

例如,如果我选中一个复选框(最初未选中),然后再次取消选中它,则“保存”按钮将启用,但数据库中的实际数据不会更改。在这种情况下,当我调用 Post 时,会引发异常。

我看到了this问题可以解决我的问题,检查是否有任何修改,但是一旦我设置第一个字段,TADOQuery 的 Modified 属性就会变为 true,从而使该解决方案无效。

另一种选择是在设置字段之前检查它是否会实际更改,并设置一个标志以最终实际发布或不发布。但是,有数百个字段可以做到这一点,这会很无聊。

我认为的第三种选择是在数据库中创建一个带有“上次修改”日期戳的新字段,这强制始终至少进行一次修改,但我不想弄乱现有数据库。

有没有其他方法可以知道 TADOQuery.Post 是否会触发异常,因为没有数据真正发生变化?我怎么解决这个问题?或者有一个简单的解决方法?

ADOQuery 变量是在“保存”按钮的例程中动态创建的(并最终被释放)。

最佳答案

使用 CheckBrowseMode() 而不是 Post() 是一个很好的方法。

ADOQuery1.CheckBrowseMode

CheckBrowseMode():当事件记录更改时自动发布或取消数据更改。

您可以在此处阅读更多相关信息: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TDataSet_CheckBrowseMode.html

关于mysql - 如何知道 ADOQuery.Post 是否会更改数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40293895/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com