Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#2

AW: TClientDataSet aus Klassenstruktur

  Alt 25. Apr 2019, 10:21
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.
Peter Below
  Mit Zitat antworten Zitat