2

私はTADODataset(例のみ)で実行しました:

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

データセットを開いた後、"name""lastname"フィールドを変更できますが、 は"fullname"計算されるため変更できません。

viaを開こうとしましTADODatasetたが、時間がかかりすぎます (ソース データセットには約 100K のレコードがあります)。TClientDatasetDataProvider

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して名前を付け、タイプを 'calculated' に設定します。

OnCalculateFields-Event に次のように記述します。

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

更新: 2 番目の問題 (100.000 レコード) について: LockType = ltBatchOptimistic を使用してそれらを ADODataset にロードすると、十分に高速になり、UpdateBatchメソッドを呼び出さない限り、データベースには何も保存されません。

それでも遅すぎる場合は、非同期ロード機能を使用してみてください ( を参照ExecuteOptions) 。

于 2013-03-15T07:32:29.527 に答える