2

我正在使用 D2009、dbGo (ADO) 将现有的 Advantage 数据库服务器应用程序转换为 SQL Server 2005。有时我会遇到错误row cannot be found for locating。我用谷歌搜索了它,根据我需要设置每个 ADOTable 的更新标准属性并将光标位置设置为动态的结果。我这样做了,但有时我仍然会遇到同样的错误。所有的表都有主键,所以我一直在使用

Query.Requery(); 
Query.Locate('ID',ID,[]); 

在更新记录之前避免错误,但必须有更好的解决方案。有任何想法吗?还是我应该继续使用 MyDAC 或 Zeoslib?

4

4 回答 4

2

dbGO/ADO 是访问 MS-SQL 数据库的自然方式。你确定这是确切的错误信息吗?因为我从来没有听说过它,但是我听说过“无法定位更新”。

该错误消息表明 ADO 找不到要删除或更新的记录。最常见的原因是表没有定义主键,或者表中至少没有列的内容都是唯一的。

确保在 MS-SQL 表中定义主键。

于 2009-04-26T12:17:03.720 回答
2

如果其他人在使用触发器时遇到同样的问题,请将 SET NOCOUNT ON 添加到触发器的开头,将 SET NOCOUNT OFF 添加到触发器的末尾。

于 2009-04-27T08:37:44.847 回答
0

无法更新行的通常情况是您对表有默认值约束。请务必为 OnNewRecord 中的字段设置值。您可能还想使用 myAdoDataset.Properties['Update Criteria'].Value := 0; 然后 ADO 应该只使用密钥进行更新。

于 2009-04-26T12:47:08.687 回答
0

简单的 adotable1.refresh; 发布后应该可以解决问题...

于 2013-02-26T07:34:36.357 回答