正在使用Delphi 7和Sql 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 客户端,从此我遇到了“记录已被另一个用户更改”错误。
请任何人帮忙
最佳答案
- BDE已经很久没有更新了。 SQL Native Client 会定期更新。您可能会遇到 BDE 和 SQLNC v 10.5 不兼容的问题。
- “记录已被其他用户更改”表示 API 返回 <> 1 条更新记录,例如 0 条记录。在大多数情况下,某些用户并非真的更改了记录。更新的记录数作为单独的消息返回,因此如果连接正忙于处理其他消息,则它可能返回 0。如果您的表有触发器,请尝试在以下位置添加
SET NOCOUNT ON
触发器顶部。 - “连接正忙于处理另一个 hstmt 的结果集”意味着您尚未从事件结果集中获取所有记录。您可以尝试获取所有记录。
- 为了避免所有这些错误,请考虑迁移到 dbExpress 或 3d 方库,例如 AnyDAC .
对 (2) 的补充:
“记录已被另一用户更改”的其他经典原因。 WHERE
短语包含一个字段和一个相应的参数,它们的精度不匹配(例如,客户端精度丢失),具有不同的格式(例如,不兼容的字符集)等。使用 SQL Profiler 检查发送到 SQL Server 的 SQL 命令和参数值。
关于sql-server - 尝试发布或编辑时记录已被其他用户更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064038/