德尔福tDataSet.Append似乎没有给邮报打电话。在它的引用中写着
更改数据集状态的Dataset方法,如编辑、插入或追加,或从一条记录移动到另一条记录,例如第一条、最后一条、下一条和优先调用Post。
但在下面的代码中,我没有看到递增的RecordCount。
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // 0
FDMemTable1.Append;
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // still 0如果在追加后插入FDMemTable1.Post,结果显示RecordCount为1。
发布于 2019-05-23 10:15:33
为什么tDataSet.Append不自动打电话给邮政?
因为它将首先击败调用追加的对象;如果它确实自动调用Post,则会导致将空白记录张贴到表中,而没有机会首先设置其字段值。同样,在编辑后自动调用Post或Insert也可以防止用户代码更改任何字段值
你从Post.html引用的声明充其量只能是用词不当的imo,因为它可能被误读以给人一种印象:“更改数据集状态的数据集方法,例如编辑、插入或附加.在方法的末尾自动调用Post”,因为我已经说过了,情况并非如此。它应该说,imo,与导航方法一样,比如第一,最后,下一步和之前,这些方法将从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;发布于 2019-05-23 03:40:38
所以它照它说的做..。
//Dataset.State = dsBrowse
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // 0
FDMemTable1.Append;
//now Dataset.State = dsInsert
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // still 0, previous record not yet posted.
FDMemTable1.Append; //because Dataset.State <> dsBrowse, it now post pending changes
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // Now 1, Dataset.State = dsInsert
FDMemTable1.Post;
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // Now 2, Dataset.State = dsBrowse 当您第一次调用Append时,就没有什么可发布的了。
https://stackoverflow.com/questions/56267626
复制相似问题