AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Record und in File speichern

Offene Frage von "delphinia"
Ein Thema von delphinia · begonnen am 17. Nov 2006 · letzter Beitrag vom 13. Mär 2007
Antwort Antwort
Seite 2 von 2     12   
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#11

Re: Record und in File speichern

  Alt 1. Mär 2007, 21:34
danke dir

das mit TAlles war nur oben ein tippfehler - aber das war nicht das problem (hatte in der zwischenablage die erste version das hab ich dann aber selber korrigiert)

ich werds mal ausprobieren

vielen dank

nico
Nico Müller
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#12

Re: Record und in File speichern

  Alt 11. Mär 2007, 14:07
die fehlermeldungen sind noch immer die gleichen ich kenn mich gar nicht mehr aus


Delphi-Quellcode:
Steuer = record
  st_bez : string[30];
  st_jahr : array [0..11] of Integer;
  st_vert : string[10];
  st_aufk : array [0..11] of longint;
end;

Modell = record
  und_bez : string[30];
  und_st : array [0..31] of Steuer;
end;


Alles= record
  Vert_ast : array [0..30] of array [0..22] of string ;
  vert_datum : array [0..31] of Vert_ent;
  mod_ : array [0..15] of Modell; // mod ist ein reserviertes wort! modular - rest ..
end;

.
.
.

procedure TMain.Speichern1Click(Sender: TObject);
var
  stream : TFileStream;
  filename : string;
begin
  filename := ChangeFileExt (Application.ExeName, '.ext'); // Filename setzen
  stream := TFileStream.Create (filename, fmCreate); // Stream erzeugen
  try
    stream.WriteBuffer (Alles, SizeOf (Alles));
  finally
    stream.Free; // Stream wieder freigeben
  end;
end;

end.
Nico Müller
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Record und in File speichern

  Alt 11. Mär 2007, 14:31
Hallo Nico,

eigentlich hat Der_Unwissende in Beitrag #10 alles erklärt. Die Methode Delphi-Referenz durchsuchenTStream.WriteBuffer erwartet als ersten Parameter eine Variable, du übergibst einen Datentyp. Aber selbst mit einer Variablen wird es in deinem Fall nicht funktionieren, da der Typ Alles dynamische Elemente (string) enthält, die nicht direkt in einen Stream geschrieben werden können. Mögliche Lösungen wurden in den vorigen Beiträgen dieses Threads aufgezeigt.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#14

Re: Record und in File speichern

  Alt 11. Mär 2007, 14:51
ja ungefähr weiß ich jetzt wies geht das stimmt aber ich schaffs nicht das umzusetzen

Delphi-Quellcode:
Steuer = record
  st_bez : string[30];
  st_jahr : array [0..11] of Integer;
  st_vert : string[10];
  st_aufk : array [0..11] of longint;
end;

Modell = record
  und_bez : string[30];
  und_st : array [0..31] of Steuer;
end;


Alles= record
  Vert_ast : array [0..30] of array [0..22] of string ;
  vert_datum : array [0..31] of Vert_ent;
  mod_ : array [0..15] of Modell; // mod ist ein reserviertes wort! modular - rest ..
end;

ich will doch nur dieses alles record speichern und laden können das dürfte doch nicht alzu kompliziert sein(ich hab vorher nie mit assign etc gearbeitet ich orientier mich da ganz an der delphihilfe)

wenn das alles gespeichert und geladen werden kann hab ich das schwierigste gescahfft bei dem programm


lg nico
Nico Müller
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Record und in File speichern

  Alt 11. Mär 2007, 15:13
Ok, der von Luckie vorgeschlagene Weg über Klassen ist sicher der beste, für den Anfang aber vielleicht etwas zu steinig. Ändere zunächst die Definition von Alles wie folgt ab:

Delphi-Quellcode:
Alles= record
// Vert_ast : array [0..30] of array [0..22] of string;
  Vert_ast : array [0..30] of array [0..22] of string[255]; // <-- hier geändert
  vert_datum : array [0..31] of Vert_ent;
  mod_ : array [0..15] of Modell;
end;
So erreichen wir, daß Delphi einen ShortString mit einer festen Länge verwendet, der direkt in einem Stream gespeichert werden kann. Nun benötigen wir noch eine Variable, welche die zu speichernden Daten aufnimmt:

Delphi-Quellcode:
var
  AlleDaten : Alles;
In dieser Variablen legst du alle zu speichernden Daten ab. Die Methode Speichern1Click muß nur an einer Stelle geändert werden:

Delphi-Quellcode:
// stream.WriteBuffer (Alles, SizeOf (Alles));
stream.WriteBuffer (AlleDaten, SizeOf (AlleDaten)); // <-- hier geändert
Nun sollte das Speichern funktionieren. Beim Laden der Daten ist es ähnlich. Mit ReadBuffer liest du die Daten in die Variable AlleDaten ein, anschließend kannst du sie verarbeiten.

Wenn dein Programm dann funktioniert, und du die Vorgänge nachvollziehen kannst, solltest du dich mit anderen Möglichkeiten der Datenspeicherung vertraut machen (dynamische Strukturen, Klassen). Der jetzige Weg ist ziemlich unflexibel und wird spätestens bei größeren Datenmengen zu Problemen führen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#16

Re: Record und in File speichern

  Alt 11. Mär 2007, 15:44
ok vielen herzlichen dank


problem ist das hier wird ja nur in den zwischenspeicher geschrieben oder?

die datei sollte jederzeit speicher und ladbar sein

bei den daten handelt es sich um modelle zur finanzausgleichsrechnung es wird also nicht eine allzugroße menge an daten zu speichern sein müssen

also zeurst nochmals danke aber mit dieser methode werde ich leider nicht allzu viel anfangen können sofern es tatsächlich nur in den zwischenspeicher "kopiert" wird

lg nico
Nico Müller
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#17

Re: Record und in File speichern

  Alt 12. Mär 2007, 07:47
ich werds jetzt mal über eine stringlist probieren schaun ob ich das schön hinkriege

lg nico
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Record und in File speichern

  Alt 12. Mär 2007, 13:23
Hallo Nicodius,

Zitat von Nicodius:
ok vielen herzlichen dank


problem ist das hier wird ja nur in den zwischenspeicher geschrieben oder?

die datei sollte jederzeit speicher und ladbar sein

lg nico
So lässt sich die Datei doch jederzeit laden und speichern oder?
Du kannst auch mehrere Datensätze mit der Hilfe von arrays mit setLength() anlegen und speichern.

Delphi-Quellcode:
type
Vert_Ent = record
  vtjahr : Integer;
  vtproz : array [0..11] of Integer;
end;

Steuer = record
  st_bez : string[30];
  st_jahr : array [0..11] of Integer;
  st_vert : string[10];
  st_aufk : array [0..11] of longint;
end;

Modell = record
  und_bez : string[30];
  und_st : array [0..31] of Steuer;
end;

Alles= record
// Vert_ast : array [0..30] of array [0..22] of string;
  Vert_ast : array [0..30] of array [0..22] of string[255]; // <-- hier geändert
  vert_datum : array [0..31] of Vert_ent;
  mod_ : array [0..15] of Modell;
end;

//schreiben
procedure TForm1.Button1Click(Sender: TObject);
var
  AlleDaten : Alles;
  stream : TFileStream;
  filename : string;
begin
  filename := ChangeFileExt (Application.ExeName, '.ext');
  stream := TFileStream.Create (filename, fmCreate);
  AlleDaten.mod_[2].und_bez:= 'Haus';//Beispiel
  try
    stream.WriteBuffer(AlleDaten, SizeOf (AlleDaten));
  finally
    stream.Free;
  end;
end;

//lesen
procedure TForm1.Button2Click(Sender: TObject);
var
  AlleDaten : Alles;
  stream : TFileStream;
  filename : string;
begin
  filename := ChangeFileExt(Application.ExeName, '.ext');
  if FileExists(filename) then
  begin
    stream := TFileStream.Create (filename, fmOpenRead);
    try
      stream.ReadBuffer(AlleDaten, SizeOf (AlleDaten));
    finally
      stream.Free;
    end;
    caption:= AlleDaten.mod_[2].und_bez;//Beispiel
  end;
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#19

Re: Record und in File speichern

  Alt 13. Mär 2007, 06:54
ahhh jetzt versteh ichs hab leider zu lange nicht mehr mit records gearbeitet

vielen dank

lg Nico
Nico Müller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:07 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