Autor Beitrag
Bofrost_Mann
Hält's aus hier
Beiträge: 15

Win XP
Delphi 5, Delphi 2005
BeitragVerfasst: So 24.02.08 11:44 
Hallo, ich habe eine Prozedur zum Laden verschiedener Werte aus einer Datei, die dann in einen Record geschrieben werden sollen. Es ist vorher nicht bekannt wieviele Werte in der Datei stehen sodass dies dann dynamisch für den Record festgelegt werden muss. Desweiteren sollen der Prozedur verschiedene Records übergeben werden können, doch da liegt mein Problem: der Befehl setlength ist mit der Parameter-Variablen inkompatibel.

Hoffe auf eure Hilfe.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
type Katalog=record
  Name: string;
  Vorname: string;
  Geburtstag: string;
  LK: string;
  Strasse: string;
  PLZ: string;
  Ort: string;
  Tel1: string;
  Tel2: string;
  Mail: string;
  ICQ: string;
end;

//...

var
  Form1: TForm1;
  Buch: array of Katalog;

//...

procedure TForm1.RecordLaden(Pfad: AnsiString; var LoadRec: array of Katalog);
var
   Stream:TFileStream;
   i: integer;
begin

  Stream:=TFileStream.Create(Pfad, fmOpenRead); //Datei erzeugen

  try
     with Treader.create(Stream,1024) do
          begin
               try
                  //...

                  i:=readinteger;
                  setlength(LoadRec, i); // <<< hier erscheint der Fehler: inkompatible Typen!
                  
                  for i:=0 to length(LoadRec)-1 do
                      begin
                           LoadRec[i].Name:=readstring;
                           LoadRec[i].Vorname:=readstring;
                           LoadRec[i].Geburtstag:=readstring;
                           LoadRec[i].LK:=readstring;
                           LoadRec[i].Strasse:=readstring;
                           LoadRec[i].PLZ:=readstring;
                           LoadRec[i].Ort:=readstring;
                           LoadRec[i].Tel1:=readstring;
                           LoadRec[i].Tel2:=readstring;
                           LoadRec[i].Mail:=readstring;
                           LoadRec[i].ICQ:=readstring;
                      end;
               finally
                  free;
               end;
          end;
  finally
    Stream.Free;
  end;

//...

procedure TForm1.Button3Click(Sender: TObject);
begin
RecordLaden('C:\Bredow\Namen.adb', Buch);
end;


Danke schonmal für eure Hilfe!

LG Der Bofrost Mann
Saubäär
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 376



BeitragVerfasst: So 24.02.08 12:53 
Moin,

du musst dir noch nen neuen Typen deklarieren.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type arKatalog = Array of Katalog;
 ...
var Buch: arKatalog;
...
procedure TForm1.RecordLaden(Pfad: AnsiString; var LoadRec: arKatalog);

Dann sollte es eigentlich funktionieren.

Gruß
Bofrost_Mann Threadstarter
Hält's aus hier
Beiträge: 15

Win XP
Delphi 5, Delphi 2005
BeitragVerfasst: So 24.02.08 13:10 
Thx! ... Das hat das Problem gelöst.

Schönes WE noch!