我执行了TADODataset
(仅举例):
SELECT id, name, lastname, name + ' ' + lastname as fullname
FROM persons
ORDER BY lastname
打开数据集后,我可以修改"name"
和"lastname"
字段,但不能修改"fullname"
,因为它是经过计算的。
我尝试通过TADODataset
向TClientDataset
打开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);
总而言之,我希望拥有一个具有可变字段的独立数据集 如何修改数据集中的计算字段?
答案 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
)