【发布时间】:2016-01-26 01:33:11
【问题描述】:
我一直在使用 DBExpress 连接到各种数据库(主要是 MSSQL、Sybase SQL):
SQLConnection -> SQLDataSet -> DataSetProvider -> ClientDataSet.
我需要以一种不会将更改写回表的方式连接到数据库。
因此,DataSetProvider 具有 ResolveToDataSet:=false,而 ClientDataSet 具有 LogChanges:=false(出于性能考虑)。
在使用中我连接SQLConnection,打开ClientDataSet,然后关闭SQLConnection。
然后我可以操作 ClientDataSet 而不必担心更改基础表。
我是 FireDAC (XE8) 的新手,我正在寻求建立相同类型的场景 - 从 SQL 查询将数据加载到内存中,并在内存中安全地操作这些数据,而不会意外更新源表)。
我目前正在使用: FDConnection -> FDQuery 和一个 FDMemTable
FDQuery 有 CachedUpdates := true 我执行:
FDQ.Open;
FDQ.FetchAll;
FDMemT.CloneCursor(FDQ,true,false);
FDQ.Close;
我认为这几乎是等价的 - 我最终得到了 FDMemTable 中的数据,这样编辑数据将无法“写回”到表中。
另一个问题 - 在 dbExpress 场景中,我经常将 InternalCalc 字段添加到 ClientDataSet。如果我正在执行 CloneCursor 操作,我不清楚是否可以这样做(并且具有持久的字段名称)。
有没有更简单的方法来确保数据永远不会更新数据库?将 FDQuery 设置为只读不起作用 - 我经常需要修改记录(但不希望保留这些更改)。
TIA。
EdB
【问题讨论】:
-
只需将 FDQuery 与 CachedUpdates = True 一起使用
-
@da-soft 谢谢——我天生的偏执不让我接受它会那么容易。是否有可能影响性能的“LogChanges:=false”等效项?
标签: delphi-xe8 dbexpress firedac