首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ Builder & ADO -如何在触发器执行后显示正确的值?

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

Stack Overflow用户
提问于 2017-08-13 17:30:37
回答 1查看 434关注 0票数 1

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

问题是,TDBGrid不知道触发器所做的更改,只有在重新打开表之后,我才看到正确的值。如果我将列'Name‘值设置为'Test',则存储在数据库表中的值是正确的- 'test’,但是TDBGrid显示的值不正确- 'test‘。

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

EN

Stack Overflow用户

回答已采纳

发布于 2017-08-14 09:11:57

ADO有动态特性,您可以用于此目的。可以将Update Resync属性设置为adResyncAutoIncrement or adResyncUpdates or adResyncInserts

代码语言:javascript
运行
复制
uses ..., ADOInt;

ADODataSet1.Properties['Update Resync'].Value := 
  adResyncAutoIncrement or adResyncUpdates or adResyncInserts;

打开数据集之后,ADO将重新同步插入/更新的记录。您还必须有一个PK IDENTITY列。

您还可以使用:

代码语言:javascript
运行
复制
ADODataSet1.Properties['Update Criteria'].Value := adCriteriaKey;

因此ADO只使用PK进行更新。

就我个人而言,我不会为此使用触发器,而是使用OnBeforePost来大写文本。

顺便说一句,我强烈建议不要养成使用TADOTable的习惯,因为它总是在内部使用SELECT * FROM。使用TADODataSet代替。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45663052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档