首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TADODataSet修改计算字段?

如何使用TADODataSet修改计算字段?
EN

Stack Overflow用户
提问于 2013-03-15 15:29:32
回答 1查看 1.7K关注 0票数 2

我有一个用来执行的TADODataset (仅作为示例):

代码语言:javascript
复制
SELECT id, name, lastname, name + ' ' + lastname as fullname
FROM persons
ORDER BY lastname

打开dataset后,我可以修改"name""lastname"字段,但不能修改"fullname",因为它是经过计算的。

我尝试通过DataProvider打开TADODatasetTClientDataset,但时间太长(源数据集中大约有100K条记录):

代码语言:javascript
复制
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);

总而言之,我希望拥有一个具有可变字段的独立数据集。

如何修改数据集中的计算字段?

EN

回答 1

Stack Overflow用户

发布于 2013-03-15 15:32:30

您必须在Delphi中计算该字段。右键单击TADODataset组件,选择New Field,为其命名并将其类型设置为'calculated‘,从而创建一个新字段。

在OnCalculateFields-Event中,只需写下:

代码语言:javascript
复制
Procedure TMyDataModule.MyDatasetCalculate(Sender : TDataset);
Begin
  MyDataSetFullName.AsString := MyDatasetFirstName.AsString+' '+MyDataSetLastName.AsString;
End;

更新:关于您的第二个问题(100.000条记录):如果使用LockType = ltBatchOptimistic将它们加载到ADODataset中,则速度将足够快,并且不会将任何内容保存到数据库中,除非您调用UpdateBatch方法。

如果仍然太慢,请尝试使用异步加载功能(请参阅ExecuteOptions)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15426925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档