AGB  ·  Datenschutz  ·  Impressum  







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

Records

Ein Thema von The Lord · begonnen am 14. Apr 2007 · letzter Beitrag vom 9. Jul 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
The Lord

Registriert seit: 19. Sep 2005
Ort: Dortmund
125 Beiträge
 
Turbo Delphi für Win32
 
#1

Records

  Alt 14. Apr 2007, 18:40
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:
type Datensatz = record
       vorname: string[25];
       nachname: string[25];
       tag: integer;
       monat: integer;
       jahr: integer;
       bild: string[100];
     end;
Danach habe ich die Variable 'datei' deklariert:

var datei: file of Datensatz;
Des Weiteren habe ich laut Tutorial folgende Prozeduren erstellt:
Delphi-Quellcode:
//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;
Weitergehend verstehe ich das Umgehen mit den Records nicht wirklich.
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: Tutorial
Alexander
Dunkel die andere Seite ist...
Klappe Yoda und iss deinen Toast!
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Records

  Alt 14. Apr 2007, 19:12
Also:

Delphi-Quellcode:
var
  data : Datensatz;
..
  Read(datei,data);
  Write(datei,data);

data.vorname:=edit1.text;
data.nachname:=edit2.text;
..
Mit FileSize(datei) bekommst Du heraus wie viele Datensätze Deine Datei enthält.
Mit Seek(datei,DatensatzNummer) kannst Du direkt zu einem Datensatz gelangen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#3

Re: Records

  Alt 14. Apr 2007, 19:18
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:
while not EoF(datei) do begin
   Read(datei, satz);
   Verarbeite(satz);
end;
Und in ganz weiter Ferne merkt man dann irgendwann, daß es mit einer TCollection irgendwie komfortabler ist
  Mit Zitat antworten Zitat
The Lord

Registriert seit: 19. Sep 2005
Ort: Dortmund
125 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Records

  Alt 14. Apr 2007, 19:56
Delphi-Quellcode:
var z : integer;
    person : Datensatz;

z:=FileSize(datei);

Seek(datei,z);
Write(datei,person);
person.vorname:=edit1.text;
Schreibe ich so am Ende der Datei den String aus Edit1 ?
Alexander
Dunkel die andere Seite ist...
Klappe Yoda und iss deinen Toast!
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Records

  Alt 14. Apr 2007, 20:24
Delphi-Quellcode:
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;
[edit] paar fehler beseitigt^^[/edit]
Dominik
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Records

  Alt 14. Apr 2007, 20:33
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!!!
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
The Lord

Registriert seit: 19. Sep 2005
Ort: Dortmund
125 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Records

  Alt 15. Apr 2007, 10:52
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.
Alexander
Dunkel die andere Seite ist...
Klappe Yoda und iss deinen Toast!
  Mit Zitat antworten Zitat
The Lord

Registriert seit: 19. Sep 2005
Ort: Dortmund
125 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Records

  Alt 1. Mai 2007, 11:34
Es funktioniert doch noch nicht

1. Fehlermeldung:

function LoadFromFile(Source: string); benötigt Ereigenistyp. Ist das dann auch 'string' ?

2. Fehler:

Delphi-Quellcode:
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;
Das Programm stürzt wegen Zeile 9 ab.


Delphi-Quellcode:
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');
So kann man doch nur an die Stelle 0 der Tabelle schreiben!?


Helft mir bitte
Alexander
Dunkel die andere Seite ist...
Klappe Yoda und iss deinen Toast!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Records

  Alt 1. Mai 2007, 11:38
Tabelle[1].
Markus Kinzler
  Mit Zitat antworten Zitat
The Lord

Registriert seit: 19. Sep 2005
Ort: Dortmund
125 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Records

  Alt 1. Mai 2007, 11:40
ok, da nehm ich halt ne Schleife. Aber das Programm stürzt ja ab. Ich kann es gar nicht ausprobieren
Alexander
Dunkel die andere Seite ist...
Klappe Yoda und iss deinen Toast!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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