Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#13

AW: Feldwerte eines Records über den Feldindex abrufen

  Alt 11. Sep 2023, 22:29
Ich habe deine Version anwenden können, es funktioniert perfekt.
Mit mORMot (ich glaube, du verwendest es) sieht es so aus:
Delphi-Quellcode:
uses
  mormot.core.base,
  mormot.core.json,
  mormot.core.rtti;

function GetFieldNameAndValue(pmTypeInfo: PRttiInfo; pmInstance: Pointer; pmFieldIdx: Integer; out pmoFieldValue: Variant): String;
var
  rttiType: TRttiType;
  rttiFields: TRttiCustomPropDynArray;
begin
  if (pmTypeInfo <> Nil)
    and (pmInstance <> Nil)
    and (pmFieldIdx >= 0) then
  begin
    rttiFields := Rtti[pmTypeInfo].Props.List;
    if Length(rttiFields) > pmFieldIdx then
    begin
      rttiFields[pmFieldIdx].GetValueVariant(pmInstance, TVarData(pmoFieldValue));
      Exit(Utf8ToString(rttiFields[pmFieldIdx].Name));
    end;
  end;
  Result := '';
end;

var
  rec: TMyRecord;
  fieldName: String;
  fieldValue: Variant;
begin
  rec.FeldC := 'Test';
  fieldName := GetFieldNameAndValue(TypeInfo(TMyRecord), @rec, 2, fieldValue);
  if fieldName <> 'then
    ShowMessage(Format('Name: %s, Value: %s', [fieldName, VarToStr(fieldValue)]));
Bis bald...
Thomas

Geändert von mytbo (11. Sep 2023 um 22:35 Uhr) Grund: Kopierfehler korrigiert
  Mit Zitat antworten Zitat