【问题标题】:simple way to copy recordset from fdquery to fdquery将记录集从 fdquery 复制到 fdquery 的简单方法
【发布时间】:2015-11-26 11:22:25
【问题描述】:

使用fireDac,有没有更简单的方法将FDQuery复制到FDQuery?

目前的硬编码解决方案是将代码中的每个字段映射到代码中的其他字段并发布和编辑等。

var
FDQueryThis,FDQueryOther:TFDQuery;
begin
  FDQueryThis.active:=true;
  FDQueryOther.active:=true;
  FDQueryThisNamelyField.AsInteger := FDQueryThis.NamelyField.AsInteger;
// some more fields
FDQueryThis.post;
end;

是否有提供此服务的工具或功能? 我确实看到 CopyRecord 是 TFDQuery 的成员,但是如何为 TFDQuery 创建记录?

【问题讨论】:

  • TFDQuery.CopyDataSet?
  • TDataSet 中有一个函数CopyFields,但这仍然需要在目标数据集上调用EditPost。 CopyRecord 做了类似的事情。 为 TFDQuery 创建记录 是什么意思?
  • 能否提供示例代码?如果我们跳过映射,这是 90% 的工作。编辑和发布只是一小部分。
  • 复制一条记录很简单(假设字段名和字段类型相同,并且要将sourceDS的当前记录的内容复制到targetDS的当前记录中):targetDS.Edit;targetDS.CopyFields(sourceDS);@ 987654328@

标签: delphi delphi-xe7 firedac


【解决方案1】:

我只是使用 CloneCursor 方法,

FDQueryThis.CloneCursor(FDQueryOther, True, False);

Here You've got full description

但请记住,物理数据保持不变。如果要将数据复制到其他位置,请使用 .Data 属性:

FDQueryThis.Data := FDQueryOther.Data;

最好的问候

【讨论】:

  • 文档不太好,当他们写“分享”时,这意味着他们使用相同的数据并从不同的方向指向它。共享就像过程调用中的 var 变量,而期望克隆是过程调用中的非 var 参数。
  • 如果您希望获得相同的物理数据,但使用不同的索引、过滤选项等,则使用 CloneCursor。如果您只想将数据复制到另一个数据集,请使用 FDQuery.Data 属性,然后生成的数据集是独立的.
  • 我很确定这个答案是不正确的。以下代码在 Delphi 10.1 Berlin 中引发异常,报告“CommandText 不得为空”。 EmployeeConnection 处于活动状态,而 EmployeeTable 处于活动状态。 var FDQuery: TFDQuery;开始 FDQuery := TFDQuery.Create ( Self ); FDQuery.Connection := EmployeeConnection; FDQuery.CloneCursor( EmployeeTable );
  • 在这种情况下,两个查询都处于活动状态: (" FDQueryThis.active:=true; FDQueryOther.active:=true;") 所以答案是正确的,但是如果克隆到查询中你是对的必须设置在实际克隆光标之前正在运行的命令文本(甚至像:'select 1')。人们可能会在 erm.. 中找到对克隆游标的更深入分析。您的文章 :):edn.embarcadero.com/article/29416
猜你喜欢
  • 2017-10-18
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多