首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么tDataSet.Append不自动呼叫Post?

为什么tDataSet.Append不自动呼叫Post?
EN

Stack Overflow用户
提问于 2019-05-23 03:16:43
回答 2查看 628关注 0票数 1

德尔福tDataSet.Append似乎没有给邮报打电话。在它的引用中写着

更改数据集状态的Dataset方法,如编辑、插入或追加,或从一条记录移动到另一条记录,例如第一条、最后一条、下一条和优先调用Post。

但在下面的代码中,我没有看到递增的RecordCount。

代码语言:javascript
复制
Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // 0

FDMemTable1.Append;

Memo1.Lines.Add(IntToStr(FDMemTable1.RecordCount)); // still 0

如果在追加后插入FDMemTable1.Post,结果显示RecordCount为1。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-23 10:15:33

为什么tDataSet.Append不自动打电话给邮政?

因为它将首先击败调用追加的对象;如果它确实自动调用Post,则会导致将空白记录张贴到表中,而没有机会首先设置其字段值。同样,在编辑后自动调用Post或Insert也可以防止用户代码更改任何字段值

你从Post.html引用的声明充其量只能是用词不当的imo,因为它可能被误读以给人一种印象:“更改数据集状态的数据集方法,例如编辑、插入或附加.在方法的末尾自动调用Post”,因为我已经说过了,情况并非如此。它应该说,imo,与导航方法一样,比如第一,最后,下一步和之前,这些方法将从Post开始,如果必要的话,在当前记录上自动调用之前,方法的其余部分将执行。这是因为这些方法总是将CheckBrowseMode作为第一步调用,其中包含以下代码

代码语言:javascript
复制
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;
票数 5
EN

Stack Overflow用户

发布于 2019-05-23 03:40:38

所以它照它说的做..。

代码语言:javascript
复制
//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时,就没有什么可发布的了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56267626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档