AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Properties per Name (String) referenzieren

Ein Thema von Bulvaye · begonnen am 25. Aug 2004 · letzter Beitrag vom 26. Aug 2004
Antwort Antwort
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#1

Re: Properties per Name (String) referenzieren

  Alt 25. Aug 2004, 11:42
die componenten kannst du ja über die forms ermitteln.
die properties ist etwas schwieriger.

du musst dann die Laufzeit-Typinformationen auswerten.
vieleicht kannst du mit dem code unten was anfangen.
der bekommt ein geöffnetes dataset und eine objekt übergeben.
dieses wird dann in die db kopiert. wichtig ist das du mit {$M+} kompilierst.

Delphi-Quellcode:
Procedure CopyToDataSet(ds: TDataset; obj: TObject);
var
  Props: PPropList;
  TypeData: PTypeData;
  i: Integer;
begin
  TypeData := GetTypeData(obj.ClassInfo);
  if (TypeData = nil) or (TypeData^.PropCount = 0) then Exit;

  GetMem(Props, TypeData^.PropCount * sizeof(Pointer));
  try
    GetPropInfos(obj.ClassInfo, Props);
    for i := 0 to TypeData^.PropCount-1 do
    begin
      with Props^[i]^ do
      begin
        case PropType^.Kind of
            tkInteger, tkFloat:
                       begin
                         if GetPropValue(obj, Name, true)<0 then
                           ds.FieldByName(Name).Clear
                         else
                           ds.FieldByName(Name).Value:=GetPropValue(obj, Name, true);
                       end;
            tkEnumeration:
                  begin
                    if GetTypeData(PropType^)^.BaseType^ = TypeInfo(Boolean) then
                    begin
                      if Boolean(GetOrdProp(Obj, Props^[i])) then
                        ds.FieldByName(Name).Value:=1
                      else
                        ds.FieldByName(Name).Value:=0;
                    end else
                      raise exception.create('speichern fuer diesen enum nicht implementiert');
                  end;
          else
            ds.FieldByName(Name).Value:=GetPropValue(obj, Name, true);
        end;
      end;
    end;
  finally
    FreeMem(Props);
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz