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
我的工作:
- 我将第一行设为
Edit
模式(通过在单元格中写入内容)
- 当我按下按钮时,它会在
Update
查询 上运行 executeSQL
- 没有任何反应 -- 更新查询没有通过
很好...但我期待一条错误消息告诉我 UPDATE
没有通过...
如何获得相同的行为但触发错误消息?
使用行锁的基本连接设置:
TFDConnection.UpdateOptions.Lockmode := lmPessimistic;
TFDConnection.UpdateOptions.LockPoint := lmImmediate;
TFDConnection.UpdateOptions.LockWait := False;
描述的行为是SQL服务器等待删除锁以完成提交更新。通过将 FireDACconnection 设置为 'no wait',一旦您尝试对通过将数据集置于编辑状态而锁定的行执行某些操作,它就会引发异常。然后你可以捕获这个异常来做你想做的事。
我目前正在从事一个项目,将代码库从使用 Advantage 数据库服务器迁移到 SQL 服务器。
我正在使用链接到 Microsoft SQL Server 2014 Express 的 XE8 的 Firedac。
我有一个小的测试项目。有一个 TDBGrid 显示 table 的内容(查询锁定模式是 Pessimistic,lockpoint immediate)。
我有另一个 TQuery
,带有这样的 SQL 命令:
update myTable
set firstName = 'John'
where id = 1
我的工作:
- 我将第一行设为
Edit
模式(通过在单元格中写入内容) - 当我按下按钮时,它会在
Update
查询 上运行 - 没有任何反应 -- 更新查询没有通过
executeSQL
很好...但我期待一条错误消息告诉我 UPDATE
没有通过...
如何获得相同的行为但触发错误消息?
使用行锁的基本连接设置:
TFDConnection.UpdateOptions.Lockmode := lmPessimistic;
TFDConnection.UpdateOptions.LockPoint := lmImmediate;
TFDConnection.UpdateOptions.LockWait := False;
描述的行为是SQL服务器等待删除锁以完成提交更新。通过将 FireDACconnection 设置为 'no wait',一旦您尝试对通过将数据集置于编辑状态而锁定的行执行某些操作,它就会引发异常。然后你可以捕获这个异常来做你想做的事。