Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Fr 15.02.13 18:01 
Hi,

nach längerer Zeit melde ich mich mal wieder mit einem Problem :wink:
Und zwar speichere ich diesen record
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    TStatistics = record
      Values : Double;
      Series : array [0..3of TChartSeries;
      procedure Clear;
    end;

wie folgt ab :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var StatsFile : File of TStatistics;
[...]
  try
    AssignFile(StatsFile, ExtractFilePath(ParamStr(0)) + '\Stats' +
                                         IntToStr(Nr) + '.dat');
    ReWrite(StatsFile);
    Write(StatsFile, Statistics[Nr]);
  finally
    CloseFile(StatsFile);
  end;


und lade ihn dann später so :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var StatsFile : File of TStatistics;
begin
  try
    AssignFile(StatsFile, FilePath);
    Reset(StatsFile);
    Read(StatsFile, Stats);
  finally
    CloseFile(StatsFile);
  end;
end;


Das klappt auch, wenn ich das Programm starte, speichere und wieder lade.
Starte ich das Programm jedoch neu, kriege ich eine access violation.
Habe schon länger gesucht, aber nichts gefunden.
Kann mir jemand weiterhelfen?

Vielen Dank! :wink:
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Fr 15.02.13 18:06 
Wie lautet die Fehlermeldung genau?

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Fr 15.02.13 18:14 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class $C0000005 with message 'access violation at 0x004084dc: read of address 0x07241270'.
---------------------------
Break   Continue   Help   
---------------------------


Die Datei an sich lädt er, wenn ich auf das record zugreifen will, kommt diese Meldung
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 15.02.13 18:29 
Hallo,

was ist Tchartseries? wirklich ein Diagramm oder Teile?
deine Datei wird dann ziemlich klein sein?

Du kannst keine Pointerdatentypen in typisierten Datein speichern, das geht nicht.

Gruß Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)

Für diesen Beitrag haben gedankt: HenryHux
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Fr 15.02.13 18:36 
Vielen Dank für die Antwort!
In der Tat, Datein sind immer nur 48Byte groß.
TChatSeries besteht zudem nur aus XY Werten.
Wie könnte ich die denn abspeichern?

Lg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 15.02.13 18:54 
In typisierten Dateien kannst du nur Datentypen mit einer festen Größe speichern. Wenn deine TChartSeries ein dynamisches Array ist, musst du das Speichern selbst übernehmen, z.B. mit TStream bzw. TFileStream und ReadBuffer/WriteBuffer. Dann kannst du deinem Record (bzw. besser gleich einer Klasse) die Methoden LoadFromStream und SaveToStream und das noch einmal mit File statt Stream spendieren und darin die Werte lesen und schreiben.
Um die später in der Datei besser zu finden, bietet sich ein Inhaltsverzeichnis am Anfang der Datei an.

Oder du nimmst gleich eine richtige Datenbank.

Für diesen Beitrag haben gedankt: HenryHux
Mr_Emre_D
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 114
Erhaltene Danke: 14



BeitragVerfasst: Sa 16.02.13 07:35 
Wie genau sind "Statistics" & "Stats" definiert?

Für diesen Beitrag haben gedankt: HenryHux
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 16.02.13 13:53 
Hi,

Danke für eure Hilfe, aber nachdem ich gestern lange vergeblich versucht habe, das record zu speichern, habe ich mich entschlossen, die einzelnen werte in einer Textdatei zu speichern, das ging dann um einiges leichter.
Stats und Statistics waren beide von Typ TStatistics, nur in verschiedenen Units.
Danke!

Lg