![]() |
AW: Feldwerte eines Records über den Feldindex abrufen
Hallo Thomas,
Ich habe deine Version anwenden können, es funktioniert perfekt. Das mit der Fehlermeldung lag daran dass bei Value das Result ein TValue ist und ich String benötigte. Das habe ich nicht gleich gesehen. Jetzt funktioniert alles perfekt.
Delphi-Quellcode:
Vielen Dank an alle und Euch noch eine schöne Zeit.
var rttiFields: TArray<TRttiField> := rttiType.GetFields;
//das TArray<TRttiField> hier bekomme ich einen Fehler angezeigt E2010 Inkompatible Typen 'String' und 'TValue' |
AW: Feldwerte eines Records über den Feldindex abrufen
Ich glaube zwar, dass Delphi beim String, Interface oder Variant aus dem OUT ein VAR macht, oder vielleicht vor Übergabe den Wert auf NIL setzt,
aber am Besten niemals für Managed-Types ein OUT benutzen. Wenn OUT wirklich das macht, was es eigentlich soll, dann wäre das eine super Stelle für Speicherleck. :stupid: |
AW: Feldwerte eines Records über den Feldindex abrufen
Zitat:
Delphi-Quellcode:
Bis bald...
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)])); Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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