Einzelnen Beitrag anzeigen

ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
375 Beiträge
 
Delphi 10.4 Sydney
 
#1

Rtti tkBoolean und tkDate nachbilden

  Alt 13. Feb 2011, 17:26
Delphi-Version: 2010
Hallo zusammen,

ich spiele gerade etwas mit der neuen RTTI rum und stoße da gerade auf ein kleines Problem.

Ich wollte die Propertys einer Klasse mit Attributen "dekorieren" und diese dann über entsprechende Methoden in eine Datenbank serialisieren. Soweit alles kein Problem, bis auf den Fakt, dass er beim Auslesen der Propertys z.Bsp. ein BOOLEAN Property als tkInteger abhandelt. Wenn ich jetzt versuche eine Query mit Parametern zu bestücken um einen Datensatz zu speichern oder zu updaten sind diese Werte nicht zuweisungskompatibel.

Habe ich also eine Chance herauszubekommen von welchem realen Typ ein Property ist ?

Delphi-Quellcode:
procedure TKultur.WritePropValues (const AKultur: TKultur; AQuery : TnxQuery);
var
  Context: TRttiContext;
  RttiType: TRttiType;
  PropInfo: TRttiProperty;
  F: Boolean;
  Attr: TCustomAttribute;
  Value: TValue;
  i : integer;
begin
  if not Assigned(AKultur) then
    Exit;
  Context := TRttiContext.Create;
  try
  RttiType := Context.GetType(AKultur.ClassType);

  if Assigned(RttiType) then
  begin
    for PropInfo in RttiType.GetProperties do
    begin
      F := False;
      for Attr in PropInfo.GetAttributes do
      begin
        if Attr is DBField then
          F := True;
      end;
      if F then
      begin
        Value := PropInfo.GetValue(AKultur);
        case Value.Kind of
          tkInt64,
          tkInteger: AQuery.ParamByName (PropInfo.Name).asInteger := Value.AsInteger;
          tkFloat: AQuery.ParamByName (PropInfo.Name).asFloat := Value.AsExtended;
          tkChar,
          tkWChar,
          tkLString,
          tkWString,
          tkUString,
          tkString: AQuery.ParamByName (PropInfo.Name).asString := Value.AsString;
        end;
      end;
    end;
  end;

  finally
   Context.Free;
  end;
Andreas Schachtner
  Mit Zitat antworten Zitat