我正在使用D2009,dbGo(ADO)将现有的Advantage Database Server应用程序转换为SQL Server 2005。有时我会遇到错误row cannot be found for locating
。我搜索了它,根据结果我需要设置每个ADOTable的Update Criteria属性并将光标位置设置为动态。我这样做了,但有时我仍然会得到同样的错误。所有表都有主键,所以我一直在使用
Query.Requery();
Query.Locate('ID',ID,[]);
在更新记录之前以避免错误,但必须有更好的解决方案。有任何想法吗?或者我应该继续使用MyDAC还是Zeoslib?
答案 0 :(得分:2)
dbGO / ADO是访问MS-SQL数据库的自然方式。您确定这是确切的错误消息吗?因为我从来没有听说过,但我听说“更新”的行不能 。
该错误消息表明ADO无法找到要删除或更新的记录。最常见的原因是表没有定义主键,或者表中至少没有列内容全部唯一的列。
确保在MS-SQL表中定义主键。
答案 1 :(得分:1)
如果其他人在使用触发器时遇到同样的问题,请将SET NOCOUNT ON添加到开头,将SET NOCOUNT OFF设置为触发结束。
答案 2 :(得分:0)
无法更新行的常见情况是您对表有默认值约束。请务必为OnNewRecord中的字段设置值。 您可能还想使用 myAdoDataset.Properties ['Update Criteria']。值:= 0; 然后ADO应该只使用密钥进行更新。
答案 3 :(得分:0)
简单的adotable1.refresh;发帖后应该做的伎俩...