Autor Téma: Runtime zjištění nazvů polí a jejich hodnot v record  (Přečteno 1409 krát)

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 429
  • Karma: 9
    • Verze Delphi: XE2
Ahoj
Potřeboval bych udělat obecnou proceduru pro ukladaní dat do XML .
Proto bych rád věděl zda lze za běhu programu zjistit názvy jednotlivých polí v recordu a přistupovat k jeho hodnotám 
Díky

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1247
  • Karma: 51
    • Verze Delphi: 10.3
Re:Runtime zjištění nazvů polí a jejich hodnot v record
« Odpověď #1 kdy: 20-01-2019, 23:57:14 »
Nejsem v tomhle žádný přeborník, ale už jsem párkrát četl stesky, že to zatím nejde:
https://quality.embarcadero.com/browse/RSP-19303

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1557
  • Karma: 37
    • Pepak.net
Re:Runtime zjištění nazvů polí a jejich hodnot v record
« Odpověď #2 kdy: 21-01-2019, 11:04:50 »
Ano, jde. Nejsem si jistý, jestli i v XE2, tam jsem to nepotřeboval řešit, ale v 10 Seattle to chodí.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1247
  • Karma: 51
    • Verze Delphi: 10.3
Re:Runtime zjištění nazvů polí a jejich hodnot v record
« Odpověď #3 kdy: 21-01-2019, 11:54:25 »
Jde. Tady se totiz jedna o pole, ne property recordu.

Díky, ještě se mám hodně co učit :-)

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 429
  • Karma: 9
    • Verze Delphi: XE2
Re:Runtime zjištění nazvů polí a jejich hodnot v record
« Odpověď #4 kdy: 21-01-2019, 22:33:33 »


Ano. XE2 obsahuje metodu GetFields.

Nějak se tím nemohu domluvit , je možné mi ukázat  na nějakem příkladu jak postupovat  ?
Děkuji

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 429
  • Karma: 9
    • Verze Delphi: XE2
Re:Runtime zjištění nazvů polí a jejich hodnot v record
« Odpověď #5 kdy: 27-01-2019, 14:16:03 »
Excellent
Rated 1 time
Napr.:
  RttiContext := TRttiContext.Create; // create RTTI context
  try
    RttiType := RttiContext.GetType(TypeInfo(TMyRecord)) as TRttiRecordType; // get type info (can be used TRttiType class)
    for RttiField in RttiType.GetFields do // iterate record fields
    begin

end;


Děkuji , funguje skvěle ,
V mém původním pokusu  jsem neměl požadované přetypování  "RttiContext.GetType(TypeInfo(TMyRecord)) as TRttiRecordType"