Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie kann ich Datenfelder in meine Klasse einbauen? (https://www.delphipraxis.net/192283-wie-kann-ich-datenfelder-meine-klasse-einbauen.html)

Ruediger123 5. Apr 2017 13:57

Wie kann ich Datenfelder in meine Klasse einbauen?
 
Hallo ich möchte gerne in meiner Klasse meinem Feld TFloatfield den Wert eines Datasets zuweisen was
zunächst funktioniert.

Code:
rttiType.GetField(rttiField.Name).SetValue(self, myQuery.FieldByName('DBFeld'));
wenn ich im Anschluss die Query schliesse sind die Daten weg da ich ja nur die Adresse kopiert habe.
Wie bekomme ich denn das komplette Flloatfield von der Query in mein Objekt kopiert?

mkinzler 5. Apr 2017 15:15

AW: Wie kann ich Datenfelder in meine Klasse einbauen?
 
Du übergibst das Feld, übergebe den Wert.

mschaefer 5. Apr 2017 17:22

AW: Wie kann ich Datenfelder in meine Klasse einbauen?
 
Hört sich vielleicht nach Mapping an.

Marshmallow ORM for Delphi

Grüße // Martin

Ruediger123 6. Apr 2017 07:19

AW: Wie kann ich Datenfelder in meine Klasse einbauen?
 
Zitat:

Zitat von mkinzler (Beitrag 1366548)
Du übergibst das Feld, übergebe den Wert.

Das habe ich auch schon versucht allerdings scheitere ich bereits beim Erstellen des Objekts

Code:
var
  rttiContext: TRttiContext;
  rttiType: TRttiType;
  attribute: TCustomAttribute;
  rttiField: TRttiField;
begin
  myQuery.Close;
  myQuery.SQL.Clear;
  myQuery.SQL.Add('SELECT * FROM Wert');
  myQuery.SQL.Add('WHERE ID=' + IntToStr(FID));
  myQuery.Open();
  try
    rttiContext := TRttiContext.Create;
    try
      rttiType := rttiContext.GetType(TWert);
      for rttiField in rttiType.GetFields do
      begin
        if rttiField.FieldType.ToString = 'TFloatField' then
        begin
          // Instanz erstellen wenn noch nicht vorhanden
          if not assigned(TFloatField(rttiType.GetField(rttiField.Name))) then
            TFloatField(rttiType.GetField(rttiField.Name)).Create(nil);
          // Wert zuweisen
          TFloatField(rttiType.GetField(rttiField.Name)).AsFloat := tmpQuery.FieldByName(rttiField.Name).AsFloat;
        end;
      end;
    finally
      rttiContext.Free;
    end
  finally
    myQuery.Close;
  end;
end;

Zitat:

Zitat von mschaefer (Beitrag 1366552)
Hört sich vielleicht nach Mapping an.

Marshmallow ORM for Delphi

Grüße // Martin

Ja so was ähnliches habe ich vor :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz