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

Delphi FireDac-覆盖更新后获取自动递增值,delphi,firedac,Delphi,Firedac,我使用FireDac和Oracle12c数据库以及DelphiSeattle 我有一个服务员 EmployeeID - NUMBER GENERATED ALWAYS AS IDENTITY HireDate - Date 在我的表格中,我有一个带有以下语句的FDQuery: select * from Employee 在FDQuery1.Insert和FDQuery1.Post之后,我可以获得生成的EmployeeID,代码如下: FDQuery1.Insert; ... F

我使用FireDac和Oracle12c数据库以及DelphiSeattle

我有一个服务员

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发布更新,如下所述:

因此,我覆盖了发布更新:

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:(

无论我在FDUpdateSQL1.InsertSQL中输入什么语句,我甚至可以将其留空。结果总是一样的

(上也有人问这个问题)

尝试使用INSERT…将EmployeeID返回到:NEW_EmployeeID in 您的FDUpdateSQL1.InsertSQL。您还需要安装程序:NEW_EmployeeID 参数如下:

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

很高兴你引起了他的注意。再次感谢你证明了他们论坛的链接。这么多有用的信息。顺便说一句,Dimitry看起来是个很棒的家伙。大概这就是为什么EMBA把他的产品带到了内部;=)
with FDUpdateSQL1.Commands[arInsert].ParamByName('NEW_EmployeeID') do begin
  ParamType := ptOutput;
  DataType := ftInteger;
end;