【问题标题】:Row cannot be found for Locate?找不到定位行?
【发布时间】:2009-04-26 08:39:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql-server delphi sql-server-2005 ado advantage-database-server


    【解决方案1】:

    dbGO/ADO 是访问 MS-SQL 数据库的自然方式。你确定这是确切的错误信息吗?因为我从来没有听说过,但是我听说过“row cannot be located for updating”。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 请使用 cmets。如果您每次都使用同一个帐号登录本站,您可以将 cmets 添加到您自己的问题中。
      • 是的,我尝试发表评论,但它需要 50 声望 - 我没有。
      • 然后用澄清或其他问题编辑您的附加帖子。 :-) 您可以随时编辑自己的帖子。
      • 谢谢,我也遇到了同样的问题
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2021-11-13
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 2013-12-16
          • 2016-10-03
          • 1970-01-01
          • 1970-01-01
          • 2016-07-19
          相关资源
          最近更新 更多