AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein dynamisch recordarray imrecord speichern
Thema durchsuchen
Ansicht
Themen-Optionen

dynamisch recordarray imrecord speichern

Ein Thema von clock50 · begonnen am 16. Nov 2008 · letzter Beitrag vom 20. Nov 2008
Antwort Antwort
clock50

Registriert seit: 9. Nov 2005
Ort: Derenburg
183 Beiträge
 
Delphi 5 Professional
 
#1

dynamisch recordarray imrecord speichern

  Alt 16. Nov 2008, 00:27
hallo zusammen, hat jemand ne ahnung wie man sowas speichern kann?
Delphi-Quellcode:
type fdb = record
     kunden : array of tkunden;
     rechnung : array of trechnung;
     rdaten : array of trdaten;
     angebot : array of tangebot;
     adaten : array of tadaten;
    end;
mit
Delphi-Quellcode:
var db : fdb; //datenbankrecord
    dfile: File of fdb;
gehts nicht oder?
Thomas
Man muß nicht alles wissen, man muß nur wissen in welchem Buch es geschrieben steht!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 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
$2B or not $2B
  Mit Zitat antworten Zitat
clock50

Registriert seit: 9. Nov 2005
Ort: Derenburg
183 Beiträge
 
Delphi 5 Professional
 
#3

Re: dynamisch recordarray imrecord speichern

  Alt 16. Nov 2008, 16:03
also ich habe auch felder mit string ca. 2500 zeichen. das geht dann nicht und mit xml habe ich noch nicht gearbeitet. gibt es da ne komponete oder muss ich mir das selbst schreiben?
Thomas
Man muß nicht alles wissen, man muß nur wissen in welchem Buch es geschrieben steht!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: dynamisch recordarray imrecord speichern

  Alt 16. Nov 2008, 23:27
Also die Strings mußt du dann auch wieder selber behandeln, da sie ja wiederrum außerhalb (über 'nen "Pointer") des enthaltenden Records/Arrays liegen.

Mit den kompletten Definitionen könnte man(ich) zwar "leicht" die passenden Schreib- und Lesefunktionen erstellen, aber wenn du dann mal das Format änderst (also die Definition der Records/Arrays änderst ... z.B. einen neuen Wert einfügen), dann hast'e ein Problem bei der Umwandlung der gespeicherten Daten. (XML wäre da flexiebler, da es sich sozusagen in der Datei die Daten passend zusammensucht und es auch nicht sooo schlimm ist, wenn ein Wert fehlt, oder zuviel ist)


bezüglich XML:
Hier im Forum suchenTXMLDocument ist bereits in Delphi integriert
und dann gibt's natürlich auch noch andere Klassen für den Zugriff ... z.B. Hier im Forum suchenThaXML
odereinfach mal nach Hier im Forum suchenXML suchen und etwas umschauen, was es sonst noch gibt.
(gibt auch viele Beispielcodes im Forum)
$2B or not $2B
  Mit Zitat antworten Zitat
clock50

Registriert seit: 9. Nov 2005
Ort: Derenburg
183 Beiträge
 
Delphi 5 Professional
 
#5

Re: dynamisch recordarray imrecord speichern

  Alt 20. Nov 2008, 07:59
hallo, also ich habs mit xml versucht aber an einer stelle komme ich nicht weiter.
speichern mache ich so:
Delphi-Quellcode:
procedure tform1.speichern;
var i : longword;
begin
with JvSimpleXML1.Root.Items.Add('kunden') do
 begin //nr, knr, anrede, name, vorname, land, plz, ort, strasse, tel, fax, mail
  for i := 0 to length(db.kunden)-1 do
  begin
  items.Add('nr',db.kunden[i].nr);
  items.Add('knr',db.kunden[i].knr);
  items.Add('anrede',db.kunden[i].anrede);
  items.Add('name',db.kunden[i].name);
  items.Add('vorname',db.kunden[i].vorname);
  items.Add('land',db.kunden[i].land);
  items.Add('plz',db.kunden[i].plz);
  items.Add('ort',db.kunden[i].ort);
  items.Add('strasse',db.kunden[i].strasse);
  items.Add('tel',db.kunden[i].tel);
  items.Add('fax',db.kunden[i].fax);
  items.Add('mail',db.kunden[i].mail);
  end;
 end;
JvSimpleXML1.savetofile(pphat+dverz+dbank);
end;
aber wie krieg ich dann das laden in mein array hin?
ich habe dann in der xml datei dann etwa sowas stehn
Delphi-Quellcode:
  <?xml version="1.0" encoding="iso-8859-1" ?>
- <kunden>
  <nr>1</nr>
  <knr>1</knr>
  <anrede>Herr</anrede>
  <name>Muster</name>
  <vorname>Heinz</vorname>
  <land>D</land>
  <plz>11111</plz>
  <ort>Neustadt</ort>
  <strasse>Halbestrasse 5</strasse>
  <tel>0000-00000</tel>
  <fax>0000-00000</fax>
  <mail>2</mail>
  <nr>1</nr>
  <knr>1</knr>
  <anrede>Herr</anrede>
  <name>Muster</name>
  <vorname>Heinz</vorname>
  <land>D</land>
  <plz>11111</plz>
  <ort>Neustadt</ort>
  <strasse>Halbestrasse 5</strasse>
  <tel>0000-00000</tel>
  <fax>0000-00000</fax>
  <mail>2</mail>
  </kunden>
Thomas
Man muß nicht alles wissen, man muß nur wissen in welchem Buch es geschrieben steht!
  Mit Zitat antworten Zitat
automatix

Registriert seit: 1. Mai 2008
Ort: Remscheid
39 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: dynamisch recordarray imrecord speichern

  Alt 20. Nov 2008, 08:56
Hallo!

Ich weiß ja nicht wofür Du genau dieses benötigst.
Aber wenn Du in eine Datei speichern willst wäre es vielleicht ein Möglichkeit die Klassen TKunden etc. statt von TObject von TPersistent abzuleiten und deren Funktion zu nutzten.
Oder vielleicht eine Schmalspur Datenbank wie sqlite nutzen.

Btw., da dieser Record zum speichern in eine Datei nicht wirklich taugt, würde ich da statt der Arrays eher eine TObjectList verwenden.

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz