SHI*_*Guk 0 delphi tdataset firedac
Delphi tDataSet.Append似乎不调用Post。它在参考中说
更改数据集状态的数据集方法(例如“编辑”,“插入”或“追加”)或从一个记录移至另一条记录(例如“第一”,“最后”,“下一个”和“上一步”)的数据集方法会自动调用“发布”。
但是在以下代码中我看不到增加的RecordCount。
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // 0
FDMemTable1.Append;
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // still 0
Run Code Online (Sandbox Code Playgroud)
如果我在Append之后插入FDMemTable1.Post,结果将显示RecordCount为1。
为什么不tDataSet.Append自动调用Post?
因为它将首先击败调用Append的对象;如果确实调用了Post,则会导致将空白记录发布到表中,而没有机会首先设置其字段值。同样,在“编辑”或“插入”后自动调用“发布”也会防止用户代码更改任何字段值
您从http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TDataSet_Post.html引用的陈述
充其量是不正确的imo,因为它可能会被误读以给出在该方法的末尾有一种印象,即“更改数据集状态的数据集方法,例如“编辑”,“插入”或“追加”将自动调用“发布”” ,这不是我所说的原因。imo应该说的是,与诸如First,Last,Next和Prior之类的导航方法一样,这些方法将以在其他方法执行之前在需要时在当前记录上自动调用Post开头。这是因为这些方法始终CheckBrowseMode是第一步的调用,其中包含代码
procedure TDataSet.CheckBrowseMode;
begin
CheckActive;
DataEvent(deCheckBrowseMode, 0);
case State of
dsEdit, dsInsert:
begin
UpdateRecord;
if Modified then Post else Cancel;
end;
dsSetKey:
Post;
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |