我使用以下 FDQuery SQL 更新计数器(无自动增量...不是我的数据库...):
UPDATE CountersTables
SET Cnter = Cnter + 1
OUTPUT Inserted.Cnter
WHERE TableName = 'TableName'
我执行 FDQuery.ExecSQL 并且它有效:“Cnter”递增。
我需要检索新的“计数器”值,但后续命令
newvalue := FDQuery.FieldByName('Cnter').AsInteger
因错误而失败:
... EDatabaseError ... 'CountersTables: Field 'Cnter' not found.
如何获取该值?
最佳答案
TFDQuery.ExecSQL()
适用于不返回记录的查询。但是您要求查询返回一条记录。因此请使用 TFDQuery.Open()
代替,例如:
FDQuery.SQL.Text :=
'UPDATE CountersTables' +
' SET Cnter = Cnter + 1' +
' OUTPUT Inserted.Cnter' +
' WHERE TableName = :TableName';
FDQuery.ParamByName('TableName').AsString := 'TableName';
FDQuery.Open;
try
NewValue := FDQuery.FieldByName('Cnter').AsInteger;
finally
FDQuery.Close;
end;
如果您连接的数据库不支持OUTPUT
,UPDATE OUTPUT into a variable显示了一些替代方法,您可以将更新的计数器保存到本地 SQL 变量/表中,然后您可以从中SELECT
。
关于sql-server - 更新后检索列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71012449/