Delphi Firedac SQL 服务器:由于记录被锁定而更新失败时未引发错误

Delphi Firedac SQL Server: no error raised when update fails because record is locked

我目前正在从事一个项目,将代码库从使用 Advantage 数据库服务器迁移到 SQL 服务器。

我正在使用链接到 Microsoft SQL Server 2014 Express 的 XE8 的 Firedac。

我有一个小的测试项目。有一个 TDBGrid 显示 table 的内容(查询锁定模式是 Pessimistic,lockpoint immediate)。

我有另一个 TQuery,带有这样的 SQL 命令:

update myTable 
set firstName = 'John'
where id = 1

我的工作:

  1. 我将第一行设为 Edit 模式(通过在单元格中写入内容)
  2. 当我按下按钮时,它会在 Update 查询
  3. 上运行 executeSQL
  4. 没有任何反应 -- 更新查询没有通过

很好...但我期待一条错误消息告诉我 UPDATE 没有通过...

如何获得相同的行为但触发错误消息?

使用行锁的基本连接设置:

TFDConnection.UpdateOptions.Lockmode := lmPessimistic;

TFDConnection.UpdateOptions.LockPoint := lmImmediate;

TFDConnection.UpdateOptions.LockWait := False;

描述的行为是SQL服务器等待删除锁以完成提交更新。通过将 FireDACconnection 设置为 'no wait',一旦您尝试对通过将数据集置于编辑状态而锁定的行执行某些操作,它就会引发异常。然后你可以捕获这个异常来做你想做的事。