我有一个Delphi 7中的项目,它使用MySQL中的数据库来存储一些配置。 每当我改变一个配置,一个“保存”按钮启用。此按钮中的OnClick过程调用TADOQuery.Edit
,Select
字段的SQL
属性,TADOQuery.Open
并设置各种FieldsByName
。最后,它TADOQuery.Post
的配置和Requery
它。如何知道ADOQuery.Post是否会更改数据库?
只有至少其中一个字段实际发生了更改,才能正常工作。例如,如果我检查checkBox(最初未选中),然后再次取消选中,保存按钮将启用,但数据库中的实际数据不会更改。在这种情况下,当我拨打Post
时,会引发异常。
我看到this问题可以解决我的问题,检查是否存在ara任何修改,但只要我设置第一个字段,TADOQuery的Modified
属性就会变为true,从而使此解决方案失效。
另一种选择是在设置字段之前检查它是否会真正发生变化,最后设置一个标志实际发布与否。但是,有数百个领域需要这样做,这将是非常无聊的事情。
我认为的第三种方法是在数据库中用“Last Modified”日期戳记创建一个新字段,它强制始终至少有一个修改,但我宁愿不要混淆现有数据库。
是否有任何其他方式知道TADOQuery.Post是否会触发异常,因为没有数据真的发生了变化?我怎么解决这个问题?或者有一个简单的解决方法呢?
ADOQuery变量是在保存按钮的例程中动态创建的(并且在最后是free'd)。
我的CBuilder ++很久以前工作过,我“觉得”有一些所谓的OldValue和的NewValue当您编辑和修改记录,但我真的不当然。很久很久以前。 – McNets
也许这样:http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TField_OldValue.html – McNets
Humm ...这似乎很好,但对于一个字段,它无法访问oldValue。我不知道为什么。现在,我把'post'放在try..except中,并检查异常消息是否是发生这种情况时的消息。当用户在系统中使用不同的语言时,它显然不起作用,但这是我现在得到的... – ricardomenzer