AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RTTI und ShortString in records...

Ein Thema von MyRealName · begonnen am 8. Mai 2023 · letzter Beitrag vom 9. Mai 2023
 
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#1

RTTI und ShortString in records...

  Alt 8. Mai 2023, 17:03
Ich versuche gerade, records in einer Liste durch RTTI in Datenbankfelder und -register zu verwandeln. Dazu will ich die genutzten records dynamisch über RTTI auslesen, ein Memory-Dataset nutzen um die Felder anzulegen und dann das Dataset mit den Daten aus den records füllen.
Jetzt habe ich das Problem, dass im Falle von ShortStrings in den records kein FieldType existiert, das Feld ist da immer nil...

Bei der Ausgabe die man, dass zwar das Feld MiddleName erkannt wird, aber keinen FieldType zugewisen bekommt.


Code:
program Project4;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Rtti, System.TypInfo, System.Generics.Collections;

type
  TSampleRec = packed record
    Id: Integer;
    FirstName: String;
    LastName: String;
    MiddleName: String[125];
    Sex: Char;
    IsActive: Boolean;
  end;

procedure RTTI_AnalyzeRecord(ATypeInfo: Pointer);
var
  ctx      : TRttiContext;
  lType    : TRttiType;
  lField   : TRttiField;
begin
  ctx      := TRttiContext.Create;
  if not Assigned(ATypeInfo) then
    exit;
  lType:=ctx.GetType(ATypeInfo);
  if not Assigned(lType) then
    exit;
  for lField in lType.GetFields do
  begin
    if Not Assigned(lField.FieldType) then
    begin
      WriteLn(Format('%-20s:%s;',[lField.Name,'Unknown']));
    end else
      WriteLn(Format('%-20s:%s;',[lField.Name,lField.FieldType.Name]));
  end;
end;

begin
  try
    RTTI_AnalyzeRecord(TypeInfo(TSampleRec));
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Frage : Wie komme ich an den Typ (ShortString) und dessen Länge (in dem Fall 125) ran ?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz