Gibt es eine Moeglichkeit, ein
TClientDataSet
automatisch aus einer Objekt-Struktur zu bestuecken?
Ich will
vermeiden, fuer eine Klasse
Delphi-Quellcode:
type
TIngredient = class(TCollectionItem)
private
FName, // <<---
FArticleNumber,
FScaleUnit,
FBarcode,
FCategory: String;
published
property Name: String read FName write FName; // <<---
property ArticleNumber: String read FArticleNumber write FArticleNumber;
property ScaleUnit: String read FScaleUnit write FScaleUnit;
property Barcode: String read FBarcode write FBarcode;
property Category: String read FCategory write FCategory;
end;
TIngredients = class(TPersistent)
private
FIngredients: TCollection;
public
constructor Create;
destructor Destroy;
procedure Read;
procedure Write;
function GetIngredient(Index: Integer): TIngredient;
procedure SetIngredient(Index: Integer; Value: TIngredient);
property Item[Index: Integer]: TIngredient read GetIngredient write SetIngredient; default;
published
property Items: TCollection read FIngredients write FIngredients;
end;
ein TClientDataSet
ausfuehrlich mit
TClientDataSet.FieldDefs.Add('Name', ftString, 0, False); // <<---
etc. zu bestuecken.
Ich will die Klasse
TIngredient angeben und die
FieldDefs automatisch aus den published properties ableiten lassen.
Eine fertige Lösung kenne ich nicht dafür, aber ein prinzipielles Problem ist das nicht. Für published properties wird seit Delphi 1 runtime type information erzeugt (siehe
unit TypInfo), also ist es relative einfach, sich eine Klasse zu schreiben, die für beliebige Objekte einen passenden TClientDataset konfigurieren und die published properties darin speichern bzw. daraus lesen kann.