gpt4 book ai didi

sql-server - C++ Builder 和 ADO - 如何在触发器执行后显示正确的值?

转载 作者:行者123 更新时间:2023-12-02 22:22:12 25 4
gpt4 key购买 nike

我创建了一个简单的测试应用程序,它使用 ADO 组件 (TADOTable) 和 TDBGrid 来插入和更新表记录。我使用的 SQL Server 数据库表具有 INSTEAD OF INSERT、UPDATE 触发器,该触发器将列“Name”的第一个字符大写。

问题是 TDBGrid 不知道触发器所做的更改,只有在重新打开表后我才能看到正确的值。如果我将“名称”列值设置为“测试”,则数据库表中存储的值是正确的 - “测试”,但 TDBGrid 显示不正确的值 - “测试”。

如何强制 TDBGrid 和其他 TDB 组件在执行触发器后自动显示正确的值?

最佳答案

ADO 有 Dynamic Properties您可以用于此目的。您可以将 Update Resync 属性设置为 adResyncAutoIncrement 或 adResyncUpdates 或 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 > 相反。

关于sql-server - C++ Builder 和 ADO - 如何在触发器执行后显示正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663052/

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