4

我正在使用Delphi 7Sql Server express 2008 R2开发应用程序,我正在使用 BDE 通过 ODBC 连接 Sql Server,并使用SQL Native Client作为驱动程序。

在某些特定形式中,表格组件引发EDBEngineError“记录已被另一个用户更改”,我只是尝试附加数据,同样的问题table.cancel发生table.posttable.edit......

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

请任何一位帮助

4

2 回答 2

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

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

于 2012-01-30T13:37:24.033 回答
0

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

于 2012-07-15T20:45:10.140 回答