![]() |
Bezeichnungen eines Records über Item ermitteln
Ist es möglich, die Bezeichnungen in einem Record über einen Pointer oder eine Art von Item-Funktion zu ermitteln?
Beispiel:
Delphi-Quellcode:
und jetzt möchte ich in einer Schleife alle Stammdatennamen herausbekommen:
type TStammdaten = record
TITEL :String[20]; NACHNAME :String[40]; VORNAME :String[28]; GEBURTSNAME :String[40]; GEBURTSDATUM :String[12]; GESCHLECHT :String[1]; STRASSE :String[40]; PLZ :String[7]; ORT :String[40]; end; (der Code ist natürlich völlig falsch und soll nur zeigen, was ich eigentlich suche)
Delphi-Quellcode:
geht das irgendwie mit einem Pointer auf das Record?
for i := 0 to 8 do
begin if TStammdaten.Item[i].Name = 'Ort' then Showmessage('das ist der Wohnort des Mitglieds'); end;
Delphi-Quellcode:
myStammdaten = ^TStammdaten
|
Re: Bezeichnungen eines Records über Item ermitteln
Du hast ja 2 Scahen vermischt, du hast einen Record und eine Klase welche eine Eigenschaft Items hat welche eine Liste oder eienen Array von diesem Recird besitzt
Du könntest wie folgend vorgehen
Delphi-Quellcode:
type
TStammdatum = record TITEL :String[20]; NACHNAME :String[40]; VORNAME :String[28]; GEBURTSNAME :String[40]; GEBURTSDATUM :String[12]; GESCHLECHT :String[1]; STRASSE :String[40]; PLZ :String[7]; ORT :String[40]; end; TStammdaten = class .. Items: Array of TStammDatum; .. procedure add ( wert: TStammdatum); var pos: Integer; begin pos := Length( items) +1 : SetLength( Items, pos); Items[pos] := Wert; end; ... end; |
Re: Bezeichnungen eines Records über Item ermitteln
Das sieht ja ganz gut aus, da ich mich aber mit Klassen nicht auskenne, konnte ich das nicht in meinem Programm übernehmen. Ich habe Dein Beispiel 1:1 in meiner Deklaration übernommen, aber mit der Procedure innerhalb der Deklaration kommt Delphi nicht zurecht. Wo muss ich denn Deinen Aufruf
Zitat:
|
Re: Bezeichnungen eines Records über Item ermitteln
zieh sie raus: also in der Klassendefinition nur den Kopf und später im Implementationsteil die Implementierung
Delphi-Quellcode:
type
... TStammdaten = class .. Items: Array of TStammDatum; .. procedure add ( wert: TStammdatum); ... end; procedure TStammdaten.add ( wert: TStammdatum); var pos: Integer; begin pos := Length( items) +1 : SetLength( Items, pos); Items[pos] := Wert; end; |
Re: Bezeichnungen eines Records über Item ermitteln
Entschuldige, aber ich bin etwas schwer von Begriff.
Die Deklaration ist jetzt klar und ohne Fehlermeldung, ich habe aber Verständnisschwierigkeiten, was die Procedure eigentlich macht und wann Sie aufgerufen werden muss. Wie wird der Item denn jetzt ermittelt? Kannst Du mir noch mit einem kleinen Beispiel helfen? So sieht das jetzt bei mir aus: In einer Unit Main wird der Record mit Daten gefüllt, dort möchte ich den Record aber ja nicht über die Bezeichnung sondern über eine Zahl (Item) ansprechen:
Delphi-Quellcode:
hier stehen die Deklarationen
unit uMain;
interface uses uDefinitionen; implementation var Mitgliedsdaten: TStammdaten; begin Mitgliedsdaten.Nachname := 'Maier'; //so nicht gewünscht Mitgliedsdaten.Item[2] := 'Maier'; //so ähnlich soll es aussehen end;
Delphi-Quellcode:
unit uDefinitionen;
interface type TStammdatum = record TITEL :String[20]; NACHNAME :String[40]; VORNAME :String[28]; GEBURTSNAME :String[40]; GEBURTSDATUM :String[12]; GESCHLECHT :String[1]; STRASSE :String[40]; PLZ :String[7]; ORT :String[40]; end; type TStammdaten = class Items: Array of TStammDatum; procedure add(wert: TStammdatum); end; implementation procedure TStammdaten.add(wert:TStammdatum); var pos: Integer; begin pos := Length(items) + 1; SetLength(Items, pos); Items[pos] := Wert; end; end. |
Re: Bezeichnungen eines Records über Item ermitteln
Delphi-Quellcode:
Zugriff dananch durch
unit uMain;
interface uses uDefinitionen; implementation var Mitgliedsdaten: TStammdaten; Datum : TStammdatum; begin Mitgliedsdaten := TStammdaten.Create; // Instanz der Klasse erzeugen Datum.Nachname := Maier; Mitgliedsdaten.Add( Datum); end; end;
Delphi-Quellcode:
auf TMitglieddatum-Struktur oder auf Nachname über
Mitgliedsdaten.Item[0]
Delphi-Quellcode:
möglich.
Mitgliedsdaten.Item[0].Nachname
|
Re: Bezeichnungen eines Records über Item ermitteln
:-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D
Super, jetzt habe ich einiges dazugelernt Vielen Dank dass Du dafür Deine Zeit geopfert hast :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D :-D Viele Grüsse Ralf |
Re: Bezeichnungen eines Records über Item ermitteln
Hi Ralf.
Ähem... Bist du dir sicher, dass das das ist, was du willst? :gruebel: Mit der Methode von mkinzler erstellst du eine Liste von Stammdaten, deine Problembeschreibung hört sich aber eher danach an, dass du folgendermaßen auf den Record zugreifen willst:
Delphi-Quellcode:
Nun, um es kurz zu machen: Es geht nicht. Man kann Records nicht wie Arrays indizieren.
type TStammdaten = record
TITEL : String[20]; NACHNAME : String[40]; VORNAME : String[28]; GEBURTSNAME : String[40]; GEBURTSDATUM : String[12]; GESCHLECHT : String[1]; STRASSE : String[40]; PLZ : String[7]; ORT : String[40]; end; // ... var a : TStammdaten; begin a[1].Value := 'Prof. Dr. med. dent.'; // a[1] ist TITEL a[2].Value := 'Schneider'; // a[2] ist NACHNAHME if a[3].Name = 'VORNAME' then ShowMessage('Alles in Ordnung'); { usw... } end. PS: Unter .NET wäre es über Reflection und Konsorten möglich, aber das führt zu weit vom Thema weg... |
Re: Bezeichnungen eines Records über Item ermitteln
Ich möchte die Bezeichnung im Record über einen Index abfragen und nicht den Inhalt
Das muss ich mal alles in Ruhe durchprobieren. Leider muss ich für heute Schluss machen Einen schönen Sonntag wünscht euch Ralf |
Re: Bezeichnungen eines Records über Item ermitteln
So, jetzt habe ich das alles noch mal durchprobiert. Der Vorschlag von mkinzler funktioniert leider nicht. Ich kann immer noch nicht auf die Record.Namen über einen Index zugreifen
Ich suche eine Methode um anstatt Stammdaten.Nachname := 'Müller'; Stammdaten[1] := 'Müller'; oder Stammdaten[1].name := 'Müller'; einzugeben Der Aufruf
Delphi-Quellcode:
ergibt nur eine Fehlermeldung
Mitgliedsdaten.Items[0]
Delphi-Quellcode:
ist ja nichts anderes als ein Array von meinem Record. Den kann ich auch einfacher haben:
Mitgliedsdaten.Items[0].Nachname
Delphi-Quellcode:
type TStammdaten = record
TITEL :String[20]; NACHNAME :String[40]; VORNAME :String[28]; GEBURTSNAME :String[40]; GEBURTSDATUM :String[12]; GESCHLECHT :String[1]; STRASSE :String[40]; PLZ :String[7]; ORT :String[40]; end; type StammdatenArray = array of TStammdaten; ..... StammdatenArray[0].Nachname := 'Müller'; .... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz