【发布时间】:2016-02-09 18:15:17
【问题描述】:
我将 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򾊐 上也有人问过这个问题)
【问题讨论】: