2

我有一个TADODataset执行(仅用于示例):

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

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

我尝试打开TADODatasetvia TClientDatasetDataProvider但时间太长(源数据集中大约有 10 万条记录):

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);

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

4

1 回答 1

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

于 2013-03-15T07:32:29.527 回答