作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 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򾊐 上也有人提出这个问题)
最佳答案
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/
我是一名优秀的程序员,十分优秀!