AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Bezeichnungen eines Records über Item ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Bezeichnungen eines Records über Item ermitteln

Ein Thema von Ralf Stehle · begonnen am 5. Mär 2006 · letzter Beitrag vom 6. Mär 2006
Antwort Antwort
Seite 1 von 3  1 23      
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#1

Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 09:09
Ist es möglich, die Bezeichnungen in einem Record über einen Pointer oder eine Art von Item-Funktion zu ermitteln?

Beispiel:

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;
und jetzt möchte ich in einer Schleife alle Stammdatennamen herausbekommen:
(der Code ist natürlich völlig falsch und soll nur zeigen, was ich eigentlich suche)

Delphi-Quellcode:
for i := 0 to 8 do
begin
  if TStammdaten.Item[i].Name = 'Ortthen Showmessage('das ist der Wohnort des Mitglieds');
end;
geht das irgendwie mit einem Pointer auf das Record?

  myStammdaten = ^TStammdaten
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 09:19
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#3

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 09:26
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:
TStammdaten = class
innerhalb meiner Unit plazieren?
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 09:33
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#5

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 09:50
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:
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;
hier stehen die Deklarationen

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.
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 09:59
Delphi-Quellcode:
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;
Zugriff dananch durch Mitgliedsdaten.Item[0] auf TMitglieddatum-Struktur oder auf Nachname über Mitgliedsdaten.Item[0].Nachname möglich.
Markus Kinzler
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#7

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 10:12


Super, jetzt habe ich einiges dazugelernt
Vielen Dank dass Du dafür Deine Zeit geopfert hast




Viele Grüsse
Ralf
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#8

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 10:45
Hi Ralf.

Ähem... Bist du dir sicher, dass das das ist, was du willst?
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:
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 = 'VORNAMEthen ShowMessage('Alles in Ordnung');
  { usw... }
end.
Nun, um es kurz zu machen: Es geht nicht. Man kann Records nicht wie Arrays indizieren.

PS: Unter .NET wäre es über Reflection und Konsorten möglich, aber das führt zu weit vom Thema weg...
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#9

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 11:40
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
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#10

Re: Bezeichnungen eines Records über Item ermitteln

  Alt 5. Mär 2006, 21:33
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 Mitgliedsdaten.Items[0] ergibt nur eine Fehlermeldung

Mitgliedsdaten.Items[0].Nachname ist ja nichts anderes als ein Array von meinem Record. Den kann ich auch einfacher haben:

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';
....
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:39 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