如何用TADODataSet修改计算字段?

时间:2013-03-15 07:29:32

标签: delphi delphi-xe tclientdataset calculated-field tadodataset

我执行了TADODataset(仅举例):

SELECT id, name, lastname, name + ' ' + lastname as fullname
FROM persons
ORDER BY lastname

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

我尝试通过TADODatasetTClientDataset打开DataProvider,但这需要太长时间(源数据集中有大约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);

总而言之,我希望拥有一个具有可变字段的独立数据集 如何修改数据集中的计算字段?

1 个答案:

答案 0 :(得分:2)

你必须在Delphi中计算字段。通过右键单击TADODataset组件创建一个新字段,选择New Field,为其命名并将其类型设置为“计算”。

在OnCalculateFields-Event中只需写:

Procedure TMyDataModule.MyDatasetCalculate(Sender : TDataset);
Begin
  MyDataSetFullName.AsString := MyDatasetFirstName.AsString+' '+MyDataSetLastName.AsString;
End;

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

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