我创建了一个简单的测试应用程序,它使用ADO (TADOTable)和TDBGrid来插入和更新表记录。我使用的Server数据库表有代替INSERT,更新触发器将列的第一个字符大写为“Name”。
问题是,TDBGrid不知道触发器所做的更改,只有在重新打开表之后,我才看到正确的值。如果我将列'Name‘值设置为'Test',则存储在数据库表中的值是正确的- 'test’,但是TDBGrid显示的值不正确- 'test‘。
如何在执行触发器后强制TDBGrid和其他TDB组件自动显示正确的值?
发布于 2017-08-14 09:11:57
ADO有动态特性,您可以用于此目的。可以将Update Resync
属性设置为adResyncAutoIncrement or adResyncUpdates or adResyncInserts
uses ..., ADOInt;
ADODataSet1.Properties['Update Resync'].Value :=
adResyncAutoIncrement or adResyncUpdates or adResyncInserts;
打开数据集之后,ADO将重新同步插入/更新的记录。您还必须有一个PK IDENTITY
列。
您还可以使用:
ADODataSet1.Properties['Update Criteria'].Value := adCriteriaKey;
因此ADO只使用PK进行更新。
就我个人而言,我不会为此使用触发器,而是使用OnBeforePost
来大写文本。
顺便说一句,我强烈建议不要养成使用TADOTable
的习惯,因为它总是在内部使用SELECT * FROM
。使用TADODataSet
代替。
https://stackoverflow.com/questions/45663052
复制相似问题