FireDAC相当于DBExpress公文包模型

时间:2015-10-26 19:52:21

标签: delphi-xe8 dbexpress firedac

我一直在使用与各种数据库(主要是MSSQL,Sybase SQL)的DBExpress连接:

SQLConnection - > SQLDataSet - > DataSetProvider - > ClientDataSet的。

我需要以不将更改写回表格的方式连接到数据库。

因此,DataSetProvider具有ResolveToDataSet:= false,而ClientDataSet具有LogChanges:= false(用于性能)。

在使用中,我连接SQLConnection,打开ClientDataSet,然后关闭SQLConnection。

然后我可以操作ClientDataSet而不用担心更改基础表。

我是FireDAC(XE8)的新手,我正在寻找同样的场景 - 从SQL查询中将数据加载到内存中,并安全地在内存中操作这些数据,而不会意外更新源表(s )。

我目前正在使用:  FDConnection - > FDQuery和FDMemTable

FDQuery有CachedUpdates:= true,我执行:

FDQ.Open;
FDQ.FetchAll;
FDMemT.CloneCursor(FDQ,true,false);
FDQ.Close;

认为这几乎是等价的 - 我最终得到了FDMemTable中的数据,因此编辑数据将无法“回写”到表格。

另一个问题 - 在dbExpress场景中,我经常将InternalCalc Fields添加到ClientDataSet。我不清楚如果我正在执行CloneCursor操作,我可以这样做(并且具有持久的字段名称)。

是否有更简单的方法可确保数据永远不会更新数据库?将FDQuery设置为只读不起作用 - 我经常需要修改记录(但不希望保留这些更改)。

TIA。

EDB

1 个答案:

答案 0 :(得分:1)

有一种更简单的方法。使用FDMemTable的CopyDataSet方法。这将复制数据和元数据。对FDMemTable的更改不会写入基础数据集,并且内部计算字段(和计算字段)也将被复制,但您必须连接OnCalcFields事件处理程序。

FDMemTable1.CopyDataSet( FDQuery1, [coStructure, coRestart, coAppend]);