sql-server - 尝试发布或编辑时记录已被其他用户更改

标签 sql-server delphi odbc bde sql-server-native-client

正在使用Delphi 7Sql Server Express 2008 R2开发应用程序,正在使用BDE通过ODBC连接Sql Server,以及SQL Native Client> 用于驱动程序。

在某些特定形式中,表格组件会引发 EDBEngineError '记录已被其他用户更改',我只是尝试追加数据,当table.cancel时出现同样的问题, table.post , table.edit ......

几天前,我将驱动程序从SQL Server更改为Sql Native Client,因为sql server存在“连接有另一个hstmt的结果集”的问题,因此我将其更改为 SQL Native 客户端,从此我遇到了“记录已被另一个用户更改”错误。

请任何人帮忙

最佳答案

  1. BDE已经很久没有更新了。 SQL Native Client 会定期更新。您可能会遇到 BDE 和 SQLNC v 10.5 不兼容的问题。
  2. “记录已被其他用户更改”表示 API 返回 <> 1 条更新记录,例如 0 条记录。在大多数情况下,某些用户并非真的更改了记录。更新的记录数作为单独的消息返回,因此如果连接正忙于处理其他消息,则它可能返回 0。如果您的表有触发器,请尝试在以下位置添加 SET NOCOUNT ON触发器顶部。
  3. “连接正忙于处理另一个 hstmt 的结果集”意味着您尚未从事件结果集中获取所有记录。您可以尝试获取所有记录。
  4. 为了避免所有这些错误,请考虑迁移到 dbExpress 或 3d 方库,例如 AnyDAC .

对 (2) 的补充: “记录已被另一用户更改”的其他经典原因。 WHERE 短语包含一个字段和一个相应的参数,它们的精度不匹配(例如,客户端精度丢失),具有不同的格式(例如,不兼容的字符集)等。使用 SQL Profiler 检查发送到 SQL Server 的 SQL 命令和参数值。

关于sql-server - 尝试发布或编辑时记录已被其他用户更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064038/

相关文章:

delphi - 如何防止用户根据其值离开 DBGrid 的单元格

php - Sage 50 ODBC 使用 PHP-SQL 状态 IM002

c# - 方法 - 32 位与 try-catch 以及 iSeries ODBC 驱动程序

sql-server - sql女士,如何使用自动编号作为计数器添加2个新列?查询中

sql-server - Linux 上的 MS SQL Server : set password using script

delphi - 为什么使用运行时包构建会使 EXE 文件更小?

multithreading - 使用SetParent将窗口嵌入外部进程的消息循环问题

c++ - Access .ldb 文件和多重连接。

asp.net - 使用 SQL Server 触发器更新插入时的旧行

sql - 如何使用 T-SQL "pick"随机记录