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

时间:2016-10-27 20:44:12

标签: mysql delphi-7

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

只有在实际更改了其中一个字段时才能正常工作。

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

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

另一种选择是在设置字段之前检查它是否实际发生变化,最后将标志设置为实际发布与否。但是,有数百个领域要做,这将是非常无聊的。

我认为第三种方法是在数据库中使用“Last Modified”日期戳创建一个新字段,该字段强制始终至少进行一次修改,但我不想搞乱现有数据库。

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

ADOQuery变量是在Save按钮的例程中动态创建的(最后是免费的)。

1 个答案:

答案 0 :(得分:0)

使用CheckBrowseMode()而不是Post()会很好。

ADOQuery1.CheckBrowseMode

<强> CheckBrowseMode(): 当活动记录更改时自动发布或取消数据更改。

您可以在此处详细了解: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TDataSet_CheckBrowseMode.html