Einführung in das Programmieren mit DELPHI  

20. Record-Typen

Mit dem Datentyp Record können mehrere Werte zu einem Datensatz zusammengefasst werden. Im Gegensatz zu Arrays, die nur Werte eines Datentyps enthalten können, kann ein Record unterschiedliche Datentypen enthalten

Wir wollen eine kleine Adressverwaltung schreiben, für die sich der Einsatz eines Datenbanksystems nicht lohnt. Dazu definieren wir einen Datensatz TAdresse, der Name, Anschrift und Telefonnummer enthält. Dann deklarieren wir eine Variable adresse vom Typ TAdresse und eine Dateivariable datei vom Typ File of TAdresse.

type
  TAdresse = record
    sAnrede : string[5];
    sName   : string[50];
    sStrasse: string[50];
    sPLZ    : string[5];
    sOrt    : string[50];
    sTelefon: string[50]
  end;

var
  Form1   : TForm1;
  adresse : TAdresse;
  datei   : File of TAdresse;

User-Interface:

Bezeichnung der Komponenten:

    btnFirst : TButton;
    btnBack  : TButton;
    btnNext  : TButton;
    btnLast  : TButton;
    btnNeu   : TButton;
    btnDel   : TButton;
    edAnrede : TEdit;
    edName   : TEdit;
    edStrasse: TEdit;
    edPLZ    : TEdit;
    edOrt    : TEdit;
    edTelefon: TEdit;

Die Syntax um auf die einzelnen Werte eines records zuzugreifen, kennen wir bereits. Es ist die gleiche wie bei den Eigenschaften unserer Delphi-Komponenten und war auch das Vorbild für die Syntax der Eigenschaften und Methoden von Objekten.

Als erstes schreiben wir uns zwei Prozeduren, die die Werte eines Datensatzes aus den Edit-Feldern einlesen, bzw. in den Edit-Feldern anzeigen.

procedure TForm1.einlesen;
begin
    adresse.sAnrede  := edAnrede.Text;
    adresse.sName    := edName.Text;
    adresse.sStrasse := edStrasse.Text;
    adresse.sPLZ     := edPLZ.Text;
    adresse.sOrt     := edOrt.Text;
    adresse.sTelefon := edTelefon.Text;
end;
procedure TForm1.anzeigen;
begin
    edAnrede.Text  := adresse.sAnrede;
    edName.Text    := adresse.sName;
    edStrasse.Text := adresse.sStrasse;
    edPLZ.Text     := adresse.sPLZ;
    edOrt.Text     := adresse.sOrt;
    edTelefon.Text := adresse.sTelefon;
end;

 

Um mehrere Datensätze im Programm halten zu können kann man entweder ein array of TAdresse deklarieren oder die Datensätze in einen formatierten String umwandeln und in einer Stringliste ablegen. Zum Speichern kann dann die Stringliste mit der Methode SaveToFile in eine Textdatei geschrieben werden.

Wir wollen statt dessen im nächsten Kapitel die Datensätze direkt in einer "typisierten" Datei also einem File of records speichern


Aufgaben

  1. Schreiben Sie eine Funktion RecToStr, die einen Datensatz in einen String umwandelt. Dabei sollen die Werte des Datensatzes genau soviel Zeichen lang sind, wie in der Typdeklaration des Datensatz festgelegt wurde. Ausgedruckt ergeben die Daten dann eine Tabelle mit fester Spaltenbreite.
  2. Schreiben Sie eine Funktion RecToSDF, die einen Datensatz in einen String umwandelt, bei dem die Werte durch einen Delimiter getrennt sind (SDF = System Data Format).
  3. Schreiben Sie die Funktionen StrToRec und SDFToRec.

Lösungen

© 2009 : Bernd Schultheiss