Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: dynamisch recordarray imrecord speichern

  Alt 16. Nov 2008, 03:16
in diesem Fall garnicht.

bei "File of fdb" sieht für die ganzen Lese-/Schreibfunktionen das Array nur so aus
Delphi-Quellcode:
type fdb = record
   kunden : Pointer;
   rechnung : Pointer;
   rdaten : Pointer;
   angebot : Pointer;
   adaten : Pointer;
  end;
und mehr würde da auch nicht gespeichert.

Falls es unbedingt eine binäre Datei sein muß, dann "var dfile: File;" oder "var dfile: File of Byte;"
und die Daten mußt du dann selber Stück für stück schreiben/lesen.
ud wie kommt auf den Inhalt an.

theoretisch könnte man es so machen ... jeweils Array-Länge und dann Array-Daten

Delphi-Quellcode:
type tdb = record
     kunden : array of tkunden;
     rechnung : array of trechnung;
     rdaten : array of trdaten;
     angebot : array of tangebot;
     adaten : array of tadaten;
    end;

var db : tdb;
    dfile: File;
    Len, i: LongInt;

// schreiben
Len = Length(db.kunden);
BlockWrite(dfile, Len, SizeOf(Len));
for i := 0 to High(db.kunden) do
  BlockWrite(dfile, db.kunden[i], SizeOf(tkunden));
Len = Length(db.rechnung);
BlockWrite(dfile, Len, SizeOf(Len));
for i := 0 to High(db.rechnung) do
  BlockWrite(dfile, db.rechnung[i], SizeOf(trechnung));
...

// lesen
BlockRead(dfile, Len, SizeOf(Len));
SetLength(db.kunden, Len);
for i := 0 to High(db.kunden) do
  BlockRead(dfile, db.kunden[i], SizeOf(tkunden));
BlockRead(dfile, Len, SizeOf(Len));
SetLength(db.rechnung, Len);
for i := 0 to High(db.rechnung) do
  BlockRead(dfile, db.rechnung[i], SizeOf(trechnung));
...
die Schleife könnte man dann vermutlich noch optimieren, indem man alle Array-Daten zusammenhängend abspeichert,

aber wie sehen eigentlich die anderen Typen aus?
tkunden, trechnung, trdaten, tangebot und tadaten ... sind da eventuell auch noch andere "dynamische" Daten enthalten, wie z.B. Strings, andere Arrays und Co.?


PS: man könnte es auch ganz schön (ich weiß, sowas hört man selber von mir, da ich bisher selber zu gern solch binäre Dateien verwendet hatte) mit XML oder Co. versuchen
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat