Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Werte speichern und abrufen? (https://www.delphipraxis.net/125460-werte-speichern-und-abrufen.html)

Siggy 6. Dez 2008 13:20


Werte speichern und abrufen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi Gemeinde,

Habe mal wieder eine Frage =)
Und da ich hier das erste Mal so schnelle Hilfe bekommen hab, dacht ich mir ich wende mich gleich als erstes wieder an euch.

Ich habe als Hausaufgabe von meinem Lehrer die Aufgabe bekommen einen BMI (BodyMassIndex) Rechner zu erstellen.
Er soll den BMI ausrechnen und dann als Ausgabe liefern wo der BMI liegt und je nachdem welches Geschlecht man besitzt eine Nachricht melden wie man ungefähr liegt.
Naja bisschen kompliziert das auszudrücken, deswegen hab ich die .exe mal angehängt.

Nun zu meiner Frage:

Ich würde gerne den BMI der "ausgespuckt" wird speichern. Sprich ich will oben einen extra Menüpunkt und in der Anwendung einen extra Button, der den Wert mit dem Datum des Pc speichert. Sodass man seinen BMI jederzeit abrufen kann um so Veränderungen festzustellen.

Ist dies möglich? Und wenn ja und es nicht allzu kompliziert ist für einen Anfänger wie mich würde ich mich sehr darüber freuen wenn mir jemand helfen könnte.


Vielen Dank im Vorraus!


Mfg Siggy

mkinzler 6. Dez 2008 13:24

Re: Werte speichern und abrufen?
 
Ini, Textdatei XML, Datenbank, ...

DeddyH 6. Dez 2008 13:27

Re: Werte speichern und abrufen?
 
Hallo, das IMHO Einfachste wäre eine IniFile. Die sind so aufgebaut:
Code:
[Section]
Ident=Value

[AnotherSection]
Ident=Value
Ident2=Value2
Delphi bietet Dir mit TIniFile (in der Unit IniFiles) eine Klasse, mit der Du so eine Datei recht bequem schreiben/lesen kannst.

[edit] 2x "Klasse" ist nicht so klasse :lol: [/edit]

Blackheart 6. Dez 2008 13:32

Re: Werte speichern und abrufen?
 
Dann noch folgend das Tutorial dazu :wink: Ini Tutorial

Siggy 6. Dez 2008 14:25

Re: Werte speichern und abrufen?
 
Erst einmal Vielen Dank für die schnellen Antworten.
Allerdings kann ich recht wenig damit anfangen :D
Kenne mich kaum bei Delphi aus, da ich erst dieses Schuljahr damit angefangen habe.

Habe mir das Tutorial mal angeschaut und habe dann folgendes gemacht.

Delphi-Quellcode:
procedure TForm3.Button3Click(Sender: TObject);
begin
ini := Tinifile.create ('c:\inispeicher.ini');
try
ini.WriteInteger (edit3.text,'W1',1234);
finally
  ini.free;
end;
Wenn ich das richtig verstanden habe sollte er doch dann eigentlich eine .ini Datei auf c:\ erstellen oder?
Naja das hat er aber nicht gemacht^^

Also der Wert den ich Speichern will steht in Edit3 und ist eine Zahl (unter umständen auch mit Komma)
Ausserdem will ich wie schon erwähnt auch gleich das aktuelle (Pc) Datum mitspeichern.

Kann mir das vlt jemand erklären so dass es auch jemand der absolut keine ahnung von sowas hat versteht?

Wäre super!!


Siggy

mkinzler 6. Dez 2008 14:30

Re: Werte speichern und abrufen?
 
Hast du das Tutorial gelesen?

Siggy 6. Dez 2008 14:32

Re: Werte speichern und abrufen?
 
Ja habe ich!

Sonst hätte ich nichtmal das hier hinbekommen

Delphi-Quellcode:
procedure TForm3.Button3Click(Sender: TObject);
begin
ini := Tinifile.create ('c:\inispeicher.ini');
try
ini.WriteInteger (edit3.text,'W1',1234);
finally
  ini.free;
end;

Wie gesagt ich kenn mich da nicht aus und hab das Tutorial auch nicht so gan verstanden.

mkinzler 6. Dez 2008 14:52

Re: Werte speichern und abrufen?
 
Mich irritiert die Tatsache das du den Inhalt des Edits als Name der Sektion nimmst.
Hast du Schreibrechte im Root von C?

Siggy 6. Dez 2008 15:00

Re: Werte speichern und abrufen?
 
Ich kann mich nur wiederholen^^

ICH HAB ABSOLUT KEIN PLAN WAS ICH DA GEMACHT HABE ;)

Ich habe einfach mal Sachen ausprobiert. Mein Ziel ist es den Wert der nach der Rechnung in Edit3 erscheint zu speichern deshabl habe ich es so probiert.
Und ich habe einfach irgend einen Pfad ausgewählt. Am liebsten wäre es mir wenn die Ini in dem Ordner gespeichert wird in dem sich auch die .exe befindet.

Kann mir da niemand vlt ein kurzes beispiel schreiben? :coder: :oops:

freak4fun 6. Dez 2008 15:03

Re: Werte speichern und abrufen?
 
Möchtest du deinen errechneten BMI einem Wert zuweisen, zB einem Namen?

Edit:
Delphi-Quellcode:
procedure TForm3.Button3Click(Sender: TObject);
begin
  ini := Tinifile.create ('c:\inispeicher.ini');
  // 'c:\inispeicher.ini' = Speicherpfad der Datei
  try
    ini.WriteInteger (edit3.text,'W1',1234);
    // Schreibt einen Integer-Wert in die Inidatei
    // edit3.text = Name der Sektion (Der Wert in den eckigen Klammern / muss eindeutig sein!)
    // 'W1' der Wert vor dem =
    // 1234 der Wert hinter dem =
  finally
    ini.free;
  end;
end;

mkinzler 6. Dez 2008 15:09

Re: Werte speichern und abrufen?
 
Wenn man dir ein Tutorial nennt, geht man davon aus, das du es zumindest versuchst zu verstehen. Du scheinst aber nicht mal den Aufbau einer Ini-datei zu verstehen!
Ich wollte dir durch die Blume sagen, das c:\ als Speicherort für eine Ini, recht schlecht ist!

DeddyH 6. Dez 2008 15:19

Re: Werte speichern und abrufen?
 
Wenn man sich die Hilfe von TIniFile durchliest und sich dabei noch meinen Post #3 anschaut, sieht man doch sofort, was mit Section, Ident und Value gemeint ist, dachte ich zumindest.

Siggy 6. Dez 2008 17:42

Re: Werte speichern und abrufen?
 
So ich sahs jetzt einige Zeit dran und habe versucht das alles zu verstehen

Sogar teilweise mit Erfolg.

Also mein WriteBefehl sieht jetzt so aus:

Delphi-Quellcode:
procedure TForm3.Button3Click(Sender: TObject);
begin
  ini := Tinifile.create ('F:\Delphi\BMI\inispeicher.ini');
    try
    ini.WriteString ('BMI-Wert1','Speicherung 1',edit3.text);
    ini.WriteDate  ('Datum1','SpDate1',Dat1); // HIER bin ich mir nicht sicher. Was muss als 3. Wert rein? Ziel ist es das aktuelle Datum zu speichern!
  finally
    ini.free;
end;

Mein ReadBefehl sieht so aus:

Delphi-Quellcode:
procedure TForm4.FormShow(Sender: TObject);
begin
ini := Tinifile.create ('F:\Delphi\BMI\inispeicher.ini');
try
  Speicherung1 := ini.ReadString('BMI-Wert1','Speicherung 1','');
  Dat1 := ini.ReadDate('Datum1','Spdate1',date);
  Label1.Caption := ((Speicherung1));
  Label2.Caption := ((Dat1));
  finally
  ini.Free;
end;
Auch hier bin ich mir wieder nicht sicher was das Datum angeht. Das mit dem BMI Wert speichern klappt schon super. Nur was muss ich ändern, damit ich das aktuelle Datum speichern kann. Und wie lautet dann der korrekte Befehl um das Datum wieder zu lesen?


Siggy

quendolineDD 6. Dez 2008 17:44

Re: Werte speichern und abrufen?
 
Ohne deinen Quelltext angeschaut zu haben würde ich mal sagen du musst die Funktion DateToStr(date) nutzen um dein Datum in einen String konveriteren zu können. Kommt doch bestimmt die Fehlermeldung das die Typen TDate und String nicht übereinstimmen ...

Das Datum liest du ganz normal wie alle anderen Werte aus und interpretierst es als Datum oder String - wie du magst.

toms 6. Dez 2008 17:45

Re: Werte speichern und abrufen?
 
Zitat:

Zitat von Siggy
// HIER bin ich mir nicht sicher. Was muss als 3. Wert rein? Ziel ist es das aktuelle Datum zu speichern!

Date

Siggy 6. Dez 2008 17:53

Re: Werte speichern und abrufen?
 
Mein Write Befehl sieht dann also so aus:

Delphi-Quellcode:
ini.WriteDate  ('Datum1','SpDate1',Date);
Richtig?

Und bei meinem ReadBefehl der so aussieht:

Delphi-Quellcode:
Dat1 := ini.ReadDate('Datum1','Spdate1',date);
Kommt immer CompilerFehler: Inkompatible Typen "string" und "TDateTime"

Was muss ich nun also bei meinem ReadBefehl ändern?



@quendolineDD

Wie und wo verwende ich die Funktion DateToStr(Date) ??

mkinzler 6. Dez 2008 18:02

Re: Werte speichern und abrufen?
 
Dat1 muss vom Typ TDate oder TDateTinme sein

Siggy 6. Dez 2008 18:13

Re: Werte speichern und abrufen?
 
Mh das hab ich doch. Glaub ich zumindest.
Deswegen hier der komplette Code:

Delphi-Quellcode:
var
  Form4: TForm4;
  ini: Tinifile;
  Speicherung1 : string;
  Spdate1 : TDate;
implementation

{$R *.dfm}

procedure TForm4.FormShow(Sender: TObject);
begin
ini := Tinifile.create ('F:\Delphi\BMI\inispeicher.ini');
try
  Speicherung1 := ini.ReadString('BMI-Wert1','Speicherung 1','');
  Spdate1 := ini.ReadDate('Datum1','Spdate 1',date);
  Label1.Caption := ((Speicherung1));
  Label2.Caption := ((SpDate1));
  finally
  ini.Free;
end;


end;

end.

mkinzler 6. Dez 2008 18:17

Re: Werte speichern und abrufen?
 
Delphi-Quellcode:
Label1.Caption := Speicherung1;
Label2.Caption := DateToStr(SpDate1); // oder FormatDateTime
Falls es nur um die Anzeige geht könntest du auch gleich in die Labels lesen:
Delphi-Quellcode:
Label2.Caption := ini.ReadString('Datum1','Spdate 1',DateToStr(Date));

Siggy 6. Dez 2008 18:26

Re: Werte speichern und abrufen?
 
Oh man ich bin doch echt bescheuert :oops:

Vielen Dank!!

Noch eine weitere Frage:

Ich habe ja jetzt einen Pfad vorgegeben. Nur wie ist das wenn ich jetzt das Programm weitergeben will (an Lehrer, Freunde etc.), dann haben die ja nicht alle unbedingt den gleichen Pfad : "F:\Deplpi\Bmi\..."

Gibt es einen Befehl, damit Die .ini Datei immer im gleichen Ordner ist wie die .exe des Programms? Also egal wo ich die .exe ausführe?


Siggy

DeddyH 6. Dez 2008 18:28

Re: Werte speichern und abrufen?
 
Den gibt es, allerdings ist es keine gute Idee, Einstellungen im Programmpfad zu speichern. Nichtsdestotrotz, das Programmverzeichnis kannst Du mit
Delphi-Quellcode:
ExtractFilePath(ParamStr(0))
ermitteln.

mkinzler 6. Dez 2008 18:43

Re: Werte speichern und abrufen?
 
Oder halt im Homeverzeichnis des Anwenders

Siggy 6. Dez 2008 18:59

Re: Werte speichern und abrufen?
 
Habe es nun so gemacht:

Delphi-Quellcode:
procedure TForm3.Button3Click(Sender: TObject);
begin
  ini := Tinifile.create (ExtractFilePath(ParamStr(0)));
Allerdings kommt nun immer die Fehlermeldung:

In F:\ (Pfad in dem sich die .exe befindet) kann nicht geschrieben werden.



Weiss jemand woran das liegt und was ich falsch mache?

mkinzler 6. Dez 2008 19:08

Re: Werte speichern und abrufen?
 
Du hast zu einem keinen Dateinamen angegeben zum 2. u.U. (je nach BS/Benutzertyp) keine Schreibrechte in diesem Verzeichnis.

DeddyH 6. Dez 2008 19:09

Re: Werte speichern und abrufen?
 
Das ist genau das, was ich gemeint hatte. Einstellungen usw. speichert man am besten im Benutzerverzeichnis ab.


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