尝试发布或编辑时,其他用户更改了记录

时间:2012-01-30 12:43:20

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

正在使用 Delphi 7 Sql Server express 2008 R2 开发应用程序,使用BDE通过ODBC连接Sql Server,以及 SQL Native Client 用于驾驶员。

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

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

请任何帮助

2 个答案:

答案 0 :(得分:5)

  1. BDE不会长时间更新。 SQL Native Client定期更新。可能会遇到BDE和SQLNC v 10.5的不兼容问题。
  2. “记录已被其他用户更改”表示该API已返回<> 1个更新的记录,例如0个记录。在大多数情况下,有些用户改变了记录并不是真的。更新记录的数量作为单独的消息返回,因此如果连接忙于其他消息,则它可能返回0.如果您的表具有触发器,则尝试在触发器顶部添加SET NOCOUNT ON
  3. “连接忙于另一个hstmt的结果集”意味着您尚未从活动结果集中获取所有记录。您可以尝试获取所有记录。
  4. 要避免所有这些错误,请考虑迁移到dbExpress或3d派对库,如AnyDAC
  5. 除了(2): “记录已被其他用户更改”的其他经典原因。 WHERE短语包括字段和相应的参数,它们不精确匹配(例如,精度在客户端丢失),具有不同的格式(例如,不兼容的字符集)等。您必须检查使用SQL事件探查器发送到SQL Server的SQL命令和参数值。

答案 1 :(得分:0)

我的朋友,您应该考虑更新您的开发工具。 对于这个问题,你应该真正使用Delphi的ZEOS组件包。 它可以连接到多种数据库,包括Firebird,MySQL,Access和SQL Server。 您所要做的就是将您正在使用的数据库的dll放在项目目录中,并将delphi的bin目标(如果目标计算机没有数据库管理器)。 然后让数据库服务器处理事务。 如果您需要更多细节,请给我一个信号。