Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datenspeicherung (https://www.delphipraxis.net/40916-datenspeicherung.html)

blacky35 23. Feb 2005 08:43


Datenspeicherung
 
Hallo,

habe als Anfänger ein kleines Problem.

Wenn ich ein Array aus einem Record habe und die Datensätze speichern will, wie gehe ich am besten vor. Welche Speicheart ist die Beste.
Es sollen aber noch zusätzlich Inhalte von Edit-Feldern und Zustände von Check-Boxen gespeichert weren. Also verschiedene Datenarten.

Von VBA her kenne ich die Eingabe von Zahlen in Textfelder mit Komma. Intern wird mit Punkt als Trenner gerechnet. Die Ausgabe erfolgt wieder mit Komma.
Wie wird das von Programmierern in Delphi gehandhabt. Wird hier alles mit Punkt gemacht. Eingabe und Ausgabe, oder wandelt ihr das Komma zur Berechnung um?

mfG blacky

Binärbaum 23. Feb 2005 10:16

Re: Datenspeicherung
 
Zitat:

Zitat von blacky35
Wie wird das von Programmierern in Delphi gehandhabt. Wird hier alles mit Punkt gemacht. Eingabe und Ausgabe, oder wandelt ihr das Komma zur Berechnung um?

Intern, also auch im Quelltext, schreibt man Dezimalzahlen in Delphi stets mit Punkt.
Um eine eingegebene Zahl (z.B. in einem Edit-Feld) in einen Real umzuwandeln, nimmt man meistens Delphi-Referenz durchsuchenStrToFloat. Ob bei der Eingabe ein Komma oder ein Punkt als Trennzeichen verlangt wird, gibt die Konstante DecimalSeparator an.

MfG
Binärbaum

//Edit: Tippfehler korrigiert

Sharky 23. Feb 2005 10:40

Re: Datenspeicherung
 
Hai blacky35,

Du könntest es mit Typisierten Dateien versuchen.
Delphi-Quellcode:
type
 TmyRecord = record
               var1 : Integer;
               var2 : String[50];
             end;

procedure TForm1.Button1Click(Sender: TObject);
var
   myRecords : Array [1..10] of TmyRecord;
   myfile : File of TmyRecord;
   ndx : Integer;
begin
   AssignFile(myfile,'test.dat');
   Rewrite (myFile);
   for ndx := Low (myRecords) to High (myRecords) do
   begin
     Write (myfile,myRecords[ndx]);
   end;
   CloseFile (myfile);
end;

blacky35 25. Feb 2005 18:07

Re: Danke, aber......
 
Hallo,

danke für eure schnellen Antworten. Das mit den typisierten Dateien habe ich verstanden, aber kann ich die Inhalte der Komponenten nicht auch in die gleiche Datei speichern.
Wie muß ich dazu vorgehen. Alles in einer Datei abzuspeichern. Array-Daten zusammen mit Komponenten-Inhalten (Edit, Check ...).

mfG blacky

ggfan 26. Feb 2005 12:13

Re: Datenspeicherung
 
Das geht in der Regel mit der Eigensachft SaveToFile

Delphi-Quellcode:
edit1.SaveToFile('c:\test.dat')
Noch eine Frage zu oben: ich habe das jetzt so gemacht wie sharky es beschrieben hat:

Delphi-Quellcode:
type Tappointments = Record
                       ID : Integer;
                       DateOFAppoint : Real;
                       BeginOFAppoint : String;
                       EndOFAppoint : String;
                       Place : String;
                       Title : String;
                       details : string;
                     end;

var appointments: Array[1 .. 1000] of Tappointments;

procedure Tfrmmain.mnusaveClick(Sender: TObject);
var
   SaveAppointments : File of Tappointments;
   ndx : Integer;
begin
   AssignFile(SaveAppointments,'test.dat');
   Rewrite (SaveAppointments);
   for ndx := Low (appointments) to High (appointments) do
   begin
     Write (SaveAppointments, appointments[ndx]);
   end;
   CloseFile (Saveappointments);
end;
Doch dann kommt die Meldung: 'Tappointments benötigt Finalization'

Binärbaum 26. Feb 2005 12:34

Re: Datenspeicherung
 
Zitat:

Zitat von ggfan
Das geht in der Regel mit der Eigensachft SaveToFile

Delphi-Quellcode:
edit1.SaveToFile('c:\test.dat')

Aber eine TEdit-Komponente hat doch gar kein SaveToFile. Das gibts nur bei Memo, TRichEdit, ...
Zitat:

Zitat von ggfan
Noch eine Frage zu oben: ich habe das jetzt so gemacht wie sharky es beschrieben hat:

Delphi-Quellcode:
type Tappointments = Record
                       ID : Integer;
                       DateOFAppoint : Real;
                       BeginOFAppoint : String;
                       EndOFAppoint : String;
                       Place : String;
                       Title : String;
                       details : string;
                     end;

var appointments: Array[1 .. 1000] of Tappointments;

procedure Tfrmmain.mnusaveClick(Sender: TObject);
var
   SaveAppointments : File of Tappointments;
   ndx : Integer;
begin
   AssignFile(SaveAppointments,'test.dat');
   Rewrite (SaveAppointments);
   for ndx := Low (appointments) to High (appointments) do
   begin
     Write (SaveAppointments, appointments[ndx]);
   end;
   CloseFile (Saveappointments);
end;
Doch dann kommt die Meldung: 'Tappointments benötigt Finalization'

Das liegt an den Strings. Wenn man die Daten so speichern will, muss man die Länge der Strings in eckigen Klammern dahinter angeben, z.B.:
Delphi-Quellcode:
type Tappointments = Record
                       ID : Integer;
                       DateOFAppoint : Real;
                       BeginOFAppoint : String[50];
                       EndOFAppoint : String[50];
                       Place : String[40];
                       Title : String[20];
                       details : string[255];
                     end;
Die Zahlen sind jetzt willkürlich gewählt, es dürfen natürlich auch andere Werte sein. Jedoch muss man beachten, dass das Maximum bei 255 Zeichen liegt.

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 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