![]() |
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 |
Re: Werte speichern und abrufen?
Ini, Textdatei XML, Datenbank, ...
|
Re: Werte speichern und abrufen?
Hallo, das IMHO Einfachste wäre eine IniFile. Die sind so aufgebaut:
Code:
Delphi bietet Dir mit TIniFile (in der Unit IniFiles) eine Klasse, mit der Du so eine Datei recht bequem schreiben/lesen kannst.
[Section]
Ident=Value [AnotherSection] Ident=Value Ident2=Value2 [edit] 2x "Klasse" ist nicht so klasse :lol: [/edit] |
Re: Werte speichern und abrufen?
Dann noch folgend das Tutorial dazu :wink:
![]() |
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:
Wenn ich das richtig verstanden habe sollte er doch dann eigentlich eine .ini Datei auf c:\ erstellen oder?
procedure TForm3.Button3Click(Sender: TObject);
begin ini := Tinifile.create ('c:\inispeicher.ini'); try ini.WriteInteger (edit3.text,'W1',1234); finally ini.free; end; 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 |
Re: Werte speichern und abrufen?
Hast du das Tutorial gelesen?
|
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. |
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? |
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: |
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; |
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! |
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.
|
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:
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?
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; Siggy |
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. |
Re: Werte speichern und abrufen?
Zitat:
|
Re: Werte speichern und abrufen?
Mein Write Befehl sieht dann also so aus:
Delphi-Quellcode:
Richtig?
ini.WriteDate ('Datum1','SpDate1',Date);
Und bei meinem ReadBefehl der so aussieht:
Delphi-Quellcode:
Kommt immer CompilerFehler: Inkompatible Typen "string" und "TDateTime"
Dat1 := ini.ReadDate('Datum1','Spdate1',date);
Was muss ich nun also bei meinem ReadBefehl ändern? @quendolineDD Wie und wo verwende ich die Funktion DateToStr(Date) ?? |
Re: Werte speichern und abrufen?
Dat1 muss vom Typ TDate oder TDateTinme sein
|
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. |
Re: Werte speichern und abrufen?
Delphi-Quellcode:
Falls es nur um die Anzeige geht könntest du auch gleich in die Labels lesen:
Label1.Caption := Speicherung1;
Label2.Caption := DateToStr(SpDate1); // oder FormatDateTime
Delphi-Quellcode:
Label2.Caption := ini.ReadString('Datum1','Spdate 1',DateToStr(Date));
|
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 |
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:
ermitteln.
ExtractFilePath(ParamStr(0))
|
Re: Werte speichern und abrufen?
Oder halt im Homeverzeichnis des Anwenders
|
Re: Werte speichern und abrufen?
Habe es nun so gemacht:
Delphi-Quellcode:
Allerdings kommt nun immer die Fehlermeldung:
procedure TForm3.Button3Click(Sender: TObject);
begin ini := Tinifile.create (ExtractFilePath(ParamStr(0))); In F:\ (Pfad in dem sich die .exe befindet) kann nicht geschrieben werden. Weiss jemand woran das liegt und was ich falsch mache? |
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.
|
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