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