TDataset 书签的有效期是多长时间?
-
21-08-2019 - |
题
我正在工作的项目中有如下代码。
procedure TForm.EditBtnClick(Sender:TObject);
begin
// Mark is form variable. It's private
Mark = cdsMain.GetBookmark;
// blabalbal
.
.
.
end;
procedure TForm.OkBtnClick(Sender:TObject);
var
mistakes: Integer;
begin
//Validation stuff and transaction control
//removed to not clutter the code
If cdsMain.ChangeCount <> 0 then
mistakes := cdsMain.AppyUpdates(-1);
cdsMain.Refresh;
try
cdsMain.GotoBookmark(Mark);
// Yes, I know I would have to call FreeBookmark
// but I'm just reproducing
except
cdsMain.First;
end;
end;
就我个人而言,我不怎么使用书签——除了重新定位数据集,我只移动光标位置(创建列表、填充字符串列表等)。如果我 Refresh
, 、更新(特别是当过滤器可以使记录不可见时)、重新获取(Close
/Open
)或任何修改数据集中数据的操作,我不使用书签。我更喜欢 Locate
在主键上(使用 TClientDataset
, ,当然)或重新查询修改参数。
书签的有效期到什么时候?直到一个 Refresh
?直到一个 Close
/Open
是为了重新获取数据吗?安全区的尽头在哪里?
考虑我正在使用的答案 TClientDataset
与一个 TSQLQuery
(DbExpress)。
其他提示
我个人很少会使用书签。我改用我查看记录的ID并执行就可以了,一旦找到刷新完成。如果我需要遍历所有的集合中的记录,我这样做,用的TClientdataSet的克隆(其都有自己的光标)。
我的理解是,书签的实施要由TDataSet的后代的供应商,并且可以实现之间变化。在我最简单的数据集( tBinData ),我实现书签的物理记录号码,以便它会只要记录并未被删除刷新之间依然存在。我不能代表所有的实现说话这个事实。
TDataSet 实现虚拟书签方法。虽然这些方法确保从 TDataSet 派生的任何数据集对象在调用书签方法时返回一个值,但返回值仅仅是默认值,不会跟踪当前位置。TDataSet 的后代(例如 TBDEDataSet)重新实现书签方法以返回有意义的值,如下列表中所述:
- 书签有效, ,用于确定指定的书签是否正在使用。
- 比较书签, ,测试两个书签,看看它们是否相同。
- 获取书签, ,为您在数据集中的当前位置分配书签。
- 转到书签, 返回到之前由 GetBookmark 创建的书签
- 免费书签, ,释放以前由 GetBookmark 分配的书签。
从以下位置获取 这里
不隶属于 StackOverflow