我有一个 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);
总而言之,我想要一个具有可更改字段的独立数据集。
如何修改数据集中的计算字段?
最佳答案
您必须在 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
)
关于delphi - 如何使用TADODataSet修改计算字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15426925/