![]() |
Records
Hallo DP-lers!
Ich habe eigentlich noch nie wirklich mit Records gearbeitet, jedoch wollte ich es gerne ändern. Im Prinzip ist das Programm, was ich zum üben schreiben möchte eine Adressbuchverwaltung. Ich habe dafür einen Typ 'Datensatz' deklariert:
Delphi-Quellcode:
Danach habe ich die Variable 'datei' deklariert:
type Datensatz = record
vorname: string[25]; nachname: string[25]; tag: integer; monat: integer; jahr: integer; bild: string[100]; end;
Delphi-Quellcode:
var datei: file of Datensatz;
Des Weiteren habe ich laut Tutorial folgende Prozeduren erstellt:
Delphi-Quellcode:
Weitergehend verstehe ich das Umgehen mit den Records nicht wirklich.
//Zum Öffnen der Datei
procedure TForm1.FormCreate(Sender: TObject); begin AssignFile(datei,'daten.dat'); if FileExists('daten.dat') then ReSet(datei) else ReWrite(datei); end; //Zum Schließen der Datei procedure TForm1.FormDestroy(Sender: TObject); begin CloseFile(datei); end; Also wenn ich jetzt mehrere Personen abspeichern will, wie mache ich das? Und wie kann ich diese wider aufrufen? Eigentlich will ich nur Strings aus Edit-Feldern speichern und dann den gewünschten Datensatz wieder in diese Felder laden. Kann mir das jemand nochmal erklären? Danke :) PS: ![]() |
Re: Records
Also:
Delphi-Quellcode:
Mit FileSize(datei) bekommst Du heraus wie viele Datensätze Deine Datei enthält.
var
data : Datensatz; .. Read(datei,data); Write(datei,data); data.vorname:=edit1.text; data.nachname:=edit2.text; .. Mit Seek(datei,DatensatzNummer) kannst Du direkt zu einem Datensatz gelangen. Grüße Klaus |
Re: Records
Erstmal vorweg: den Dateinamen ohne jeden Pfad ist schonmal gefährlich, denn falls mal ne Verknüpfung drauf erstellt wird, vielleicht mit anderem Arbeitspfad, sucht das Programm die schon woanders, und dann wundert man sich natürlich, warum das Programm die Daten auf einmal nicht mehr findet...
Die Daten im Programmverzeichnis an sich sind natürlich auch so eine don't-do-Sache, aber fürs üben... Bleibt zu meinem Vorredner noch EoF (End-of-File) zu erwähnen, will man einfach alle Daten nacheinander auslesen:
Delphi-Quellcode:
Und in ganz weiter Ferne merkt man dann irgendwann, daß es mit einer TCollection irgendwie komfortabler ist ;)
while not EoF(datei) do begin
Read(datei, satz); Verarbeite(satz); end; |
Re: Records
Delphi-Quellcode:
Schreibe ich so am Ende der Datei den String aus Edit1 ?
var z : integer;
person : Datensatz; z:=FileSize(datei); Seek(datei,z); Write(datei,person); person.vorname:=edit1.text; |
Re: Records
Delphi-Quellcode:
[edit] paar fehler beseitigt^^[/edit]
type TDatensatz = record
vorname: string[25]; nachname: string[25]; tag: integer; monat: integer; jahr: integer; bild: string[100]; end; var Tabelle: Array of TDatensatz; //... procedure SaveToFile(Dest: string); var f: file of TDatensatz; I: Cardinal; begin try assignFile(f, Dest); reWrite(f); //oder reset(f) for I := low(Tabelle) to high(Tabelle) do write(f, Tabelle[i]); finally closeFile(f); end; end; function LoadFromFile(Source: string); var f: file of TDatensatz; I: Cardinal; begin I := 0; try assignFile(f, Source); reset(f); SetLength(Tabelle, FileSize(f)); while not eof(f) do begin read(f, Tabelle[I]); Inc(I); end; finally closeFile(f); end; end; procedure irgendwas; begin LoadFromFile('C:\Test.dat'); if high(Tabelle) > 0 then begin Tabelle[0].Vorname := editVorname.text; editNachname.Text := Tabelle[0].Nachname; end; SaveToFile('C:\Test.dat'); end; |
Re: Records
Ich will bloß mal kurz sagen, dass es nach dem Lesen dieses wunderbaren Tutorials eigentlich keine probleme mehr geben sollte! Jedenfalls nicht, wenn man es ordentlich durchgelsen hat und auch mal ein bisschen rumgebastelt hat!!!
Ich hatte damals auf jeden Fall sofort typisierte Dateien anwenden können... mithilfe jenes Tutorials von dsdt!!! |
Re: Records
Im Prinzip funktionieren Records doch wie INI-Files. Nur das es jetzt nicht mehr egal ist, ob man es an Anfang oder Ende schriebt!?
Ok danke, ich glaube ich werde es hinbekommen. :dp: |
Re: Records
Es funktioniert doch noch nicht :(
1. Fehlermeldung:
Delphi-Quellcode:
benötigt Ereigenistyp. Ist das dann auch 'string' ?
function LoadFromFile(Source: string);
2. Fehler:
Delphi-Quellcode:
Das Programm stürzt wegen Zeile 9 ab.
procedure SaveToFile(Dest: string);
var f: file of TDatensatz; I: Cardinal; begin try assignFile(f, Dest); reWrite(f); //oder reset(f) for I := low(Tabelle) to high(Tabelle) do write(f, Tabelle[i]); finally closeFile(f); end; end;
Delphi-Quellcode:
So kann man doch nur an die Stelle 0 der Tabelle schreiben!?
LoadFromFile('C:\test.dat');
if high(Tabelle) > 0 then begin Tabelle[0].Vorname := Edit1.Text; //Edit2.Text := Tabelle[0].Nachname; end; SaveToFile('C:\test.dat'); Helft mir bitte :) |
Re: Records
Delphi-Quellcode:
Tabelle[1].
|
Re: Records
ok, da nehm ich halt ne Schleife. Aber das Programm stürzt ja ab. Ich kann es gar nicht ausprobieren :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz