【发布时间】:2013-03-15 07:29:31
【问题描述】:
我有一个TADODataset 执行(仅作为示例):
SELECT id, name, lastname, name + ' ' + lastname as fullname
FROM persons
ORDER BY lastname
打开数据集后,我可以修改"name"和"lastname"字段,但不能修改"fullname",因为是计算出来的。
我尝试通过DataProvider打开TADODataset到TClientDataset,但是时间太长(源数据集中大约有100K条记录):
SrcDS.FieldDefs.Update;
for i := 0 to Pred(SrcDS.FieldDefs.Count) do
SrcDS.FieldDefs[i].CreateField(SrcDS).ReadOnly := false;
DestDS := TClientDataset.Create(nil);
DestDS.SetProvider(SrcDS);
DestDS.Open;
DestDS.SetProvider(nil);
总而言之,我希望拥有一个具有可变字段的独立数据集。
如何修改数据集中的计算字段?
【问题讨论】:
-
您希望全名可编辑 - 然后呢?您不能将其写回数据库(除非您在事件处理程序中将其解析回名称和姓氏,这很容易出错)。你想用全名完成什么?
-
我不想写回数据库。链接到 TcxGrid 组件的数据集。我只想在客户端更改数据集,因此更改将显示在组件中。
-
您通过更改其组件来更改全名...当您不回写它们时,允许编辑全名有什么用?除非您要拆分新的全名并将拆分结果写入名字/姓氏字段?在这种情况下:使用多元文化名称会很有趣。
-
这只是展示计算字段的例子
-
+1 这是个好问题。我试图在某个时候实现相同的行为。我的结论是,这是不可能的。即使使用
LockType = ltBatchOptimistic,您可以编辑计算的字段,但我没有找到方法告诉提供者不更新在@987654331 期间对 calc 字段所做的更改@.
标签: delphi delphi-xe tclientdataset calculated-field tadodataset