gpt4 book ai didi

Delphi FireDac - 覆盖更新后获取自动递增值

转载 作者:行者123 更新时间:2023-12-02 03:03:31 37 4
gpt4 key购买 nike

我将 FireDac 与 Oracle 12c 数据库和 Delphi Seattle 结合使用。

我有一张员工表

EmployeeID - NUMBER GENERATED ALWAYS AS IDENTITY
HireDate - Date

在我的表单上,我有一个包含以下语句的 FDQuery:

select * from Employee

在 FDQuery1.Insert 和 FDQuery1.Post 之后,我可以使用以下代码获取生成的 EmployeeID:

  FDQuery1.Insert;
...
FDQuery1.Post;
ShowMessage(IntToStr(FDQuery1.FieldByName('EMPLOYEEID').AsInteger));

这非常有效。

问题:

我现在想要覆盖 FDQuery 发布更新,如下所述: http://docwiki.embarcadero.com/RADStudio/XE8/en/Overriding_Posting_Updates_%28FireDAC%29

所以我覆盖了发布更新:

procedure TForm3.FDQuery1UpdateRecord(ASender: TDataSet;
ARequest: TFDUpdateRequest; var AAction: TFDErrorAction;
AOptions: TFDUpdateRowOptions);
begin
FDUpdateSQL1.ConnectionName := FDQuery1.ConnectionName;
FDUpdateSQL1.DataSet := FDQuery1;
FDUpdateSQL1.Apply(ARequest, AAction, AOptions);

AAction := eaApplied;
end;

但现在 EMPLOYEEID 显示为 -1 :(

  ShowMessage(IntToStr(FDQuery1.FieldByName('EMPLOYEEID').AsInteger));

我在 FDUpdateSQL1.InsertSQL 中输入什么语句并不重要。我什至可以将其留空。结果总是一样的。

(https://forums.embarcadero.com/thread.jspa?messageID=778896&#778896 上也有人提出这个问题)

最佳答案

By Dmitry Arefiev from the Embarcadero Discussion Forum :

尝试使用 INSERT ... RETURNING EmployeeID INTO :NEW_EmployeeID in你的FDUpdateSQL1.InsertSQL。您还需要设置:NEW_EmployeeID像这样的参数:

with FDUpdateSQL1.Commands[arInsert].ParamByName('NEW_EmployeeID') do begin
ParamType := ptOutput;
DataType := ftInteger;
end;

关于Delphi FireDac - 覆盖更新后获取自动递增值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35299242/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com