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

标签 delphi delphi-xe tclientdataset calculated-field tadodataset

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

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

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

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

相关文章:

delphi - 将数据从一个数据集结构移动到另一个数据集结构的更快方法(在 TDatasetProvider 中)

delphi - 当我在 Delphi 中使用 SOAP 通过 SOAP 将数据远程读取到客户端数据集时,从 TXMLTransform 发送的 XML 解析错误意味着什么?

delphi - Delphi 2009 中的函数 CreateProcess 中的访问冲突

delphi - 进程名称在 Delphi XE 中不可见附加到进程对话框 - 无法调试

Delphi 7,TRichedit,被 RTF 编码困住

web-services - 方法中的参数过多……(从Delphi XE中的WSDL连接到WebService)

delphi - 如何在运行时向 ActnPopup.TPopupActionBar 组件添加标准操作?

delphi - 如何检测ApplyUpdates是否会插入或更新数据?

delphi - 捕获击键以导航自定义控件内手动绘制的项目?

Delphi 中类 Java 的集合