Entwickler-Ecke
Dateizugriff - File of record
Dr. Confusius - Do 20.03.03 16:08
Titel: File of record
Ich bin ziemlicher Anfänger, deshalb ist für euch die Lösung wahrscheinlich relativ einfach.
Ich möchte gerne eine Datei laden, die aus von mir erstellten Records besteht. Dazu habe ich zu beginn meiner Prozedur folgendes definiert:
Quelltext
1: 2:
| var Termindatei : file of TPlaner; |
Wobei ich zuvor TPlaner wie folgt definiert habe:
Quelltext
1: 2: 3: 4: 5:
| type TPlaner =record Termine : array[1..max] of TTermin; AnzTermine : integer; end; |
Bevor ich die Variable Termindatei definiert habe, ist das Programm gelaufen - die Typendefinition TPlaner ist also fehlerfrei (hoffe ich).
Ich erhalte immer folgende Fehlermeldung:
| Zitat: |
| [Fehler] Typ 'TPlaner' benötigt Finalization - nicht im Dateityp erlaubt |
Was hat das zu bedeuten?
Klabautermann - Do 20.03.03 16:36
Hallo,
wie sieht den tTermin aus?
Generell aber Datentypen die in eine Datei gespeichert werden sollen imme als Packed definieren:
Quelltext
1: 2: 3: 4:
| TPlaner = packed record Termine : array[1..max] of TTermin; AnzTermine : integer; end; |
Gruß
Klabautermann
Dr. Confusius - Do 20.03.03 17:10
Meine Typen sehen wie folgt aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TZeitpunkt = packed record Datum : TDate; Zeit : TTime; end;
TTermin = packed record ZP, AlarmZP, WEnde, TEnd : TZeitpunkt; Widerholung : integer; Bezeichnung, Kom : String; Klonfl : boolean; end;
TPlaner = packed record Termine : array[1..max] of TTermin; AnzTermine : integer; end; |
packed record hat da leider nicht geholfen.
Aya - Do 20.03.03 17:15
Hi,
ich würde mal tippen das es an dem Array liegt den du da benutzt... :)
1.) Versuch mal den Auszukommentieren, ob es dann geht... (dann wissen wir ob es an ihm liegt ;) )
2.) Wenn ja, dann schreib mal anstelle von Max eine feste zahl rein, denn es gibt oft/immer probleme wenn man auf die Art wie du es machen willst einen Dynamischen Array speichern will.. leider :(
Wenn es dann dennoch nich geht, mußt du wohl jedes ArrayFeld von hand in die Datei schreiben... ;) Also einfach mit ner ForSchleife immer ein Feld nach dem anderen reinpacken.
Au'revoir,
Aya~
Klabautermann - Do 20.03.03 17:20
Hallo,
| Dr. Confusius hat folgendes geschrieben: |
Quelltext 1:
| Bezeichnung, Kom : String; | |
das ist der Fehler.
Du musst die länge der Strings festlegen, da Delphi sonst nicht wissen kann, wie groß die Blöcke sind, die es in die Datei schreiben muss.
Aso mache ein
Quelltext
1:
| Bezeichnung, Kom : String[200]; |
oder ähnliches draus.
Desweiteren solltest du bei allen Records das Packed angeben, damit die Blöcke 1. möglichst klein sind und 2. dein Programm auch dann noch seine Dateien lesen kann, wenn du es mal mit einer anderen Delphi Version Kompilierst.
Gruß
Klabautermann
Dr. Confusius - Do 20.03.03 17:40
Das war es, :lol: vielen Dank für die Hilfe!
Ich fürchte nur, dass das nicht mein letztes Problem gewesen sein wird. :x
Klabautermann - Do 20.03.03 18:01
Hi,
| Dr. Confusius hat folgendes geschrieben: |
| Ich fürchte nur, dass das nicht mein letztes Problem gewesen sein wird. :x |
das währe ja auch langweilig ;). Aus Problemen lernt mensch, deshalb sollte man diese nicht so negativ sehen.
Gruß
Klabautermann
PS: Ein einfaches Demo zu Typisierten Datein kann
hier [
http://downloads.oitmann.de/samples] runtergeladen werden.
mimi - So 30.03.03 22:11
Problem gelöst ???
Dr. Confusius - Mo 31.03.03 08:10
Jo :lol: ,
Vielen Dank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!