如何实现独立克隆TADODataSet?
场景是这样的:
我们有一些 SQL 表。我们正在该表上执行 SQL 查询,并且我们在 TADOQuery 对象中得到结果。
var
qryOryginal, qryClone: TADOQuery;
begin
//setup all the things here
qryOryginal.Active := True;
qryClone.Clone(qryOryginal, ltBatchOptimistic);
qryOryginal.Delete; //delete in qryOryginal casues that qryClone deletes its record too!
end;
因此,在克隆数据集之后,我的 qryClone 应该保存独立的数据(至少我是这么认为的)。但是,对 qryOryginal 执行删除会导致对 qryClone 执行相同的操作。我不想要这样。
有什么想法吗?
我知道我可以将数据存储在其他地方,也许在 TClientDataSet 中,但我想首先尝试上述解决方案。
预先感谢您的宝贵时间。
The scenarios is like this:
We have some SQL table. We are performing an SQL query on this table and we have results in TADOQuery object.
var
qryOryginal, qryClone: TADOQuery;
begin
//setup all the things here
qryOryginal.Active := True;
qryClone.Clone(qryOryginal, ltBatchOptimistic);
qryOryginal.Delete; //delete in qryOryginal casues that qryClone deletes its record too!
end;
So, after cloning the DataSet my qryClone should hold and independent data(at least I thought so). However, performing Delete on qryOryginal causes the same operation on the qryClone. I don't want that.
Any ideas?
I know I could store the data elsewhere, in TClientDataSet perhaps but I would like to try the above solution first.
Thanks in advance for your time.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用 TADODataSet 的记录集来克隆 TADODataSet。
该版本适用于 Delphi XE。 ADOInt 已使用 MDAC 2.8 的类型库定义进行更新。
此版本必须用于 Delphi XE 之前的 Delphi 版本。 ADOR_TLB 是从 msado28.tlb 生成的。
You can use the recordset of a TADODataSet to clone a TADODataSet.
This version works from Delphi XE. ADOInt is updated with the type library definitions for MDAC 2.8
This version must be used for versions of Delphi prior to Delphi XE. ADOR_TLB is generated from msado28.tlb.
我更喜欢用TClientDataSet来实现,因为复制后我们可以根据需要自由编辑。
I more like realization with TClientDataSet, because we can freely edit it as we need after copying.
克隆只是克隆数据集上的光标,而不是复制数据集中保存的数据。
如果您需要有两个独立的数据,那么您必须将数据从原始数据集中复制到第二个数据集中。
如果你想读取或修改单个数据集而不改变数据集上的当前光标,那么你可以使用克隆方法。
Cloning just clones the cursor on dataset, not duplicating the data kept in the dataset.
If you need to have two independent data, then you have to copy the data from the original dataset to the second one.
If you want to read or modify a single dataset without changing the current cursor on the dataset, then you can use Clone method.
或者第二种方式,使用
Devexpress dxMemData
。非常有用且易于使用的组件。Or second way, use
Devexpress dxMemData
. Very useful and easy-to-use component.