更新后检索列的值?
Retrieve value of a column after update?
我用这个 FDQuery SQL:
更新了一个计数器(没有自动增量...不是我的数据库...)
UPDATE CountersTables
SET Cnter = Cnter + 1
OUTPUT Inserted.Cnter
WHERE TableName = 'TableName'
我执行 FDQuery.ExecSQL 并且它有效:'Cnter' 递增。
我需要检索新的 'Counter' 值,但后续命令
newvalue := FDQuery.FieldByName('Cnter').AsInteger
失败并出现错误:
... EDatabaseError ... 'CountersTables: Field 'Cnter' not found.
获取该值的方法是什么?
TFDQuery.ExecSQL()
适用于 不 return 记录的查询。但是您要求查询 return 一条记录。所以使用 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 variable/table然后你可以 SELECT
from.
您还有 RETURNING Unified support 好的,文档只显示 INSERT SQL 但 UPDATE 也有效。
我应该使用 substitution variable 作为表名
我用这个 FDQuery SQL:
更新了一个计数器(没有自动增量...不是我的数据库...)UPDATE CountersTables
SET Cnter = Cnter + 1
OUTPUT Inserted.Cnter
WHERE TableName = 'TableName'
我执行 FDQuery.ExecSQL 并且它有效:'Cnter' 递增。
我需要检索新的 'Counter' 值,但后续命令
newvalue := FDQuery.FieldByName('Cnter').AsInteger
失败并出现错误:
... EDatabaseError ... 'CountersTables: Field 'Cnter' not found.
获取该值的方法是什么?
TFDQuery.ExecSQL()
适用于 不 return 记录的查询。但是您要求查询 return 一条记录。所以使用 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 variable/table然后你可以 SELECT
from.
您还有 RETURNING Unified support 好的,文档只显示 INSERT SQL 但 UPDATE 也有效。 我应该使用 substitution variable 作为表名