![]() |
speichern von var
hi leute
ich programmiere noch nicht sehr lange in delphi und deswegen hätte ich eine frage! wie kann ich variablen speichern und dann wieder aufrufen? mfg tom |
Re: brauche dringend hilfe!!
Hi Frodo_Beutlin
Erstmal ist dein Thema-Titel nicht sehr aussagekräftig! Aber wie meinst du "speichern"? Meinst du in Dateien speichern oder allgemein im Code? Flare |
Re: brauche dringend hilfe!!
wie man etwas im code speichern kann
und auch in einer datei(zb, .text) mfg tom |
Re: brauche dringend hilfe!!
Hai tom,
ersteinmal: "Herzlich Willkommen in der Delphi-PRAXiS" :hi: Wie schon gesagt wurde ist der Titel deines Threads nicht sehr aufschlussreich. Ändere ihn doch bitte in dem Du in deinem obersten Posting rechts auf den Edit-Button klickst. Zu deiner Frage: Je nach dem was Du genau machen möchtest könntest Du zum Beispiel mit einer INI-Datei anfangen. Suche mal im Forum nach ![]() |
Re: brauche dringend hilfe!!
Ich habe jetzt aber nicht Lust dir zu erklären wie man Vaiablen benutzt...
Delphi-Quellcode:
Das zum deklarieren.
var Form1: TForm1;
zahl1,zahl2: integer; Benutzen kannst du sie so:
Delphi-Quellcode:
Für die Dateien suche mal in der DP!
zahl1 := 3;
zahl2 := zahl1 + 5; Form1.Caption := IntToStr(zahl2); Flare |
Re: brauche dringend hilfe!!
Zitat:
|
Re: brauche dringend hilfe!!
wie man variablen benutz weis ich :???:
i weis nur nicht wie ich sie speichern kann :( |
Re: speichern von var
Hi,
wie dir schon von Sharky gesagt wurde variiert das mit deinen Anforderungen. In einigen Fällen (dürfte auf dich nicht zutreffen) wirst du sicherlich nicht um eine Datenbank rumkommen, in anderen Fällen bietet sich XML an und in wieder anderen CSV oder ini. Genau genommen gibt es nahezu unendlich viele Möglichkeiten. Für das einfache Speichern und Laden einzelner Variable wirst du sicherlich am leichtesten mit den Inifiles arbeiten können. Eine ini hat dabei immer eine einfache Form: [SectionName] Key = Value Delphi kapselt in TIniFile alles was du brauchst. Auch für XML, DBs und soweiter gibt es in der Regel schon fertige Kapselungen. Versuch dich einfach erstmal an den inis und schau (wie Sharky schon sagte) dort einfach mal in die OH Gruß Der Unwissende |
Re: speichern von var
könnt ihr mir links gebn wo ich das nachlesen kann?
wie kann ich es nun im quelltext speichern? |
Re: speichern von var
Hi Frodo. :hi:
Hier ein Tutorial zu Ini-Dateien: ![]() Aber was du mit "im Quellcode speichern" meinst, verstehe ich nicht... :gruebel: |
Re: speichern von var
Ich hab im Quellcode "speichern" angesprochen, damit meinte ich aber eigentlich die Benutzung von Variablen.
Flare |
Re: speichern von var
Du könntest dass ganze auch folgendermaßen machen.
Das ist - finde ich - bei wenigen Daten noch einfacher:
Delphi-Quellcode:
Das ist mal 'n komplettes Beispielprogramm.
program Project2;
{$APPTYPE CONSOLE} var F: TextFile; var1, var2: string; var3, var4: Integer; begin //Variablen initialisieren var1 := 'bla'; var2 := 'blubb'; var3 := 42; var4 := 0; //Datei öffnen und die Daten Zeile für Zeile abspeichern AssignFile(F, 'DATEINAME'); Rewrite(F); Writeln(F, var1); Writeln(F, var2); Writeln(F, var3); Writeln(F, var4); CloseFile(F); //Variablen "leeren" var1 := ''; var2 := ''; var3 := -1; var4 := -1; //Datei öffnen und die Daten Zeile für Zeile auslesen AssignFile(F, 'DATEINAME'); Reset(F); Readln(F, var1); Readln(F, var2); Readln(F, var3); Readln(F, var4); CloseFile(F); //Variablen in Konsole ausgeben Writeln(var1); Writeln(var2); Writeln(var3); Writeln(var4); Readln; end. |
Re: speichern von var
@Hador
Warum stellst du hier Pascal-Code rein wenn es um Win32 Delphi geht? Flare |
Re: speichern von var
:shock: :shock: :shock:
Das IST Object Pascal (Delphi Win32) Code Zitat:
|
Re: speichern von var
Und ich bitte euch beim Thema zu bleiben und alles andere via PM zu klären.
Danke. |
Re: speichern von var
danke für die hilfe und die links zum toturial.. ich habe sie mir durchgelesen und es ausprobiert...
das speichern hat funktioniert aber wenn ich die variablen dann wieder aufrufen will, funktioniert es nicht...sie bekommmen dann alle 0 zugewiesen ?!?!? ich hoffe ihr könnt ihr mir erneut helfen :)
Delphi-Quellcode:
unit umfrage;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles; type TForm1 = class(TForm) Label1: TLabel; choosedrg: TRadioGroup; votebtm: TButton; procedure votebtmClick(Sender: TObject); procedure FormShow(sende:TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; a,b,c,d,e,f,ap,bp,cp,dp,ep,fp,x:double; ini: TIniFile; implementation {$R *.dfm} procedure TForm1.FormShow(sende:TObject); begin ini:=TIniFile.create('ergebnis.ini'); try a:=ini.ReadFloat('frage1','wert1',0); b:=ini.ReadFloat('frage1','wert2',0); c:=ini.ReadFloat('frage1','wert3',0); d:=ini.ReadFloat('frage1','wert4',0); e:=ini.ReadFloat('frage1','wert5',0); f:=ini.ReadFloat('frage1','wert6',0); finally ini.Free; end; end; procedure TForm1.votebtmClick(Sender: TObject); begin case choosedrg.ItemIndex of 0:a:=a+1; 1:b:=b+1; 2:c:=c+1; 3:d:=d+1; 4:e:=e+1; 5:f:=f+1; end; x:=a+b+c+d+e+f; ap:=a*100/x; bp:=b*100/x; cp:=c*100/x; dp:=d*100/x; ep:=e*100/x; fp:=f*100/x; ini:=TIniFile.Create((ParamStr(0))+'ergebnis.ini'); ini.WriteFloat('frage1', 'wert1', a); ini.WriteFloat('frage1', 'wert2', b); ini.WriteFloat('frage1', 'wert3', c); ini.WriteFloat('frage1', 'wert4', d); ini.WriteFloat('frage1', 'wert5', e); ini.WriteFloat('frage1', 'wert6', f); ini.free; end; end. lg tom |
Re: speichern von var
Hallo Tom!
Schau Dir doch mal Deinen Code genau an:
Delphi-Quellcode:
Siehst Du den Unterschied? Bei ersten Mal wird die Datei im aktuellen Verzeichnis gesucht (das nicht unbedingt das Programmverzeichnis sein muß, ein reines Glücksspiel!), im zweiten Fall im Programmverzeichnis. Obendrein hast Du vergessen, den Programmnamen rauszunehmen, der Ini-Name ist also "programmverzeichnis\programm.exeergebnis.ini" - kein Wunder, daß die Werte leer sind.
procedure TForm1.FormShow(sende:TObject);
begin ini:=TIniFile.create('ergebnis.ini'); end; procedure TForm1.votebtmClick(Sender: TObject); ini:=TIniFile.Create((ParamStr(0))+'ergebnis.ini'); end; Schreibe in beiden Fällen:
Delphi-Quellcode:
Außerdem ist es unnötig, die Variable "ini" global zu deklarieren. Deklariere sie jeweils in den Methoden, in denen sie benutzt wird.
ini:=TIniFile.Create(ExtractFilePath (ParamStr(0))+'ergebnis.ini');
Desweiteren: beim ersten Teil hast Du einen Ressourcenschutzblock drin, beim zweiten mal nicht! Da frage ich mich natürlich, wo Du Deinen Code zusammengesucht hast und ob Du überhaupt verstehst, was Du da geschrieben hast - man sollte nicht kopieren, sondern kapieren! Dietmar Brüggendiek Edit: hupps - da fehlte ja ExtractFilePath! |
Re: speichern von var
jetzt habe ich das geändert jedoch funktioniert es immer noch nicht :?
Delphi-Quellcode:
tg tom
unit umfrage;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles; type TForm1 = class(TForm) Label1: TLabel; choosedrg: TRadioGroup; votebtm: TButton; procedure votebtmClick(Sender: TObject); procedure FormShow(sende:TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; a,b,c,d,e,f,ap,bp,cp,dp,ep,fp,x:double; ini: TIniFile; implementation {$R *.dfm} procedure TForm1.FormShow(sende:TObject); begin ini:=TIniFile.create(ExtractFilePath (ParamStr(0))+'D:\Office\Delphi\Umfragen\umfragepr.exeergebnis.ini'); try a:=ini.ReadFloat('frage1','wert1',0); b:=ini.ReadFloat('frage1','wert2',0); c:=ini.ReadFloat('frage1','wert3',0); d:=ini.ReadFloat('frage1','wert4',0); e:=ini.ReadFloat('frage1','wert5',0); f:=ini.ReadFloat('frage1','wert6',0); finally ini.Free; end; end; procedure TForm1.votebtmClick(Sender: TObject); begin case choosedrg.ItemIndex of 0:a:=a+1; 1:b:=b+1; 2:c:=c+1; 3:d:=d+1; 4:e:=e+1; 5:f:=f+1; end; x:=a+b+c+d+e+f; ap:=a*100/x; bp:=b*100/x; cp:=c*100/x; dp:=d*100/x; ep:=e*100/x; fp:=f*100/x; ini:=TIniFile.create(ExtractFilePath (ParamStr(0))+'ergebnis.ini'); ini.WriteFloat('frage1', 'wert1', a); ini.WriteFloat('frage1', 'wert2', b); ini.WriteFloat('frage1', 'wert3', c); ini.WriteFloat('frage1', 'wert4', d); ini.WriteFloat('frage1', 'wert5', e); ini.WriteFloat('frage1', 'wert6', f); ini.free; end; end. |
Re: speichern von var
kann mir bitte jemand helfen?!?!?!?!?!
|
Re: speichern von var
Sag mal, verstehst du überhaupt, was du da schreibst? :wall: :wall: :wall:
Delphi-Quellcode:
Wenn die aktuelle Anwendung D:\Office\Delphi\Umfragen\umfragepr.exe heißt, dann kommt da hinten D:\Office\Delphi\Umfragen\D:\Office\Delphi\Umfrage n\umfragepr.exeergebnis.ini raus.
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'D:\Office\Delphi\Umfragen\umfragepr.exeergebnis.ini');
Und bevor ich jetz noch nen Herzinfarkt bekomme:
Delphi-Quellcode:
So müssen beide Zeilen lauten (sowohl 35 als auch 65).
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'ergebnis.ini');
Außerdem darf man erst nach 24 Stunden pushen. :warn: |
Re: speichern von var
Zitat:
Delphi-Quellcode:
liefert schon den Absoluten Pfad zu deinem Projekt, so dass du ihn nicht noch einmal angeben musst.
ExtractFilePath (ParamStr(0))
also:
Delphi-Quellcode:
Auch solltest du auf den Gebrauch von globalen Variablen verzichten
ini:=TIniFile.create(ExtractFilePath (ParamStr(0))+'umfragepr.exeergebnis.ini');
EDIT: Ich glaub der rote Kasten hat Urlaub :gruebel: Und bitte erst nach 24h pushen! |
Re: speichern von var
erstmal sorry fürs pushen hab ich nicht gewusst..
soll ich jetzt bei beiden zeilen
Delphi-Quellcode:
oder
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'umfragepr.exeergebnis.ini');
Delphi-Quellcode:
schreiben?
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'ergebnis.ini');
|
Re: speichern von var
also ich würde
Delphi-Quellcode:
nehmen. Nimm den Namen, der für dich passender erscheint.
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'ergebnis.ini');
|
Re: speichern von var
ich habe beides schon versucht aber irgendwie bekomme ich nie die gespeicherten werte :cry:
kann mir jemand villeicht den quellcode so hinschrieben wie es funktioniren müsste? |
Re: speichern von var
Moin Frodo,
das einfachste, und übersichtlichste, wäre wohl, wenn Du ini als Feld in Deinem Formular deklarierst, und nur einmal (!) erzeugst. Beispielsweise:
Delphi-Quellcode:
Da man Datenbereiche von Objekten als Felder bezeichnet, bekommen diese, üblicherweise, den Präfix F, es funktioniert natürlich auch ohne.
TForm1 = class(TForm)
//.... private Fini : TIniFile; end; /... implementation procedure TForm1.Form1Create(Sender: TObject); // OnCreate begin // Instanz erzeugen // Hier muss die Ini-Datei im Programmverzeichnis liegen. Fini := TIniFile.Create(ExtractFilepath(paramstr(0)+'ergebnis.ini'); end; procedure TForm1.Form1Destroy(Sender: TObject); // OnDestroy begin // ...und wieder freigeben. FreeAndNil(Fini); end; |
Re: speichern von var
Delphi-Quellcode:
müsste dies dann so ausseheb?
unit umfrage;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles; type TForm1 = class(TForm) Label1: TLabel; choosedrg: TRadioGroup; votebtm: TButton; procedure votebtmClick(Sender: TObject); procedure FormShow(sende:TObject); private Fini:TIniFile: public { Public-Deklarationen } end; var Form1: TForm1; a,b,c,d,e,f,ap,bp,cp,dp,ep,fp,x:double; implementation {$R *.dfm} procedure TForm1.Form1Create(sender:TObject); begin Fini := TIniFile.Create(ExtractFilepath(paramstr(0)+'ergebnis.ini'); a:=ini.ReadFloat('frage1','wert1',0); b:=ini.ReadFloat('frage1','wert2',0); c:=ini.ReadFloat('frage1','wert3',0); d:=ini.ReadFloat('frage1','wert4',0); e:=ini.ReadFloat('frage1','wert5',0); f:=ini.ReadFloat('frage1','wert6',0); end; procedure TForm1.votebtmClick(Sender: TObject); begin case choosedrg.ItemIndex of 0:a:=a+1; 1:b:=b+1; 2:c:=c+1; 3:d:=d+1; 4:e:=e+1; 5:f:=f+1; end; x:=a+b+c+d+e+f; ap:=a*100/x; bp:=b*100/x; cp:=c*100/x; dp:=d*100/x; ep:=e*100/x; fp:=f*100/x; ini:=TIniFile.create(ExtractFilePath (ParamStr(0))+'ergebnis.ini'); ini.WriteFloat('frage1', 'wert1', a); ini.WriteFloat('frage1', 'wert2', b); ini.WriteFloat('frage1', 'wert3', c); ini.WriteFloat('frage1', 'wert4', d); ini.WriteFloat('frage1', 'wert5', e); ini.WriteFloat('frage1', 'wert6', f); end; procedure TForm1.Form1Destroy(Sender: TObject); begin FreeAndNil(Fini); end; end. |
Re: speichern von var
Nein!
In der
Delphi-Quellcode:
hast du "ini" und nicht "FIni" genommen!
procedure TForm1.votebtmClick(Sender: TObject);
Außerdem reicht es bei deiner Variante die Datei nur einmal zu Createn. Also in der
Delphi-Quellcode:
Das
procedure TForm1.votebtmClick(Sender: TObject);
Delphi-Quellcode:
wegnehmen
ini := TIniFile.Create(...);
Edit: Ich sehe gerade: INI gibt es gar nicht! Es gibt nur FIni! (siehe
Delphi-Quellcode:
)
procedure TForm1.Form1Create(sender:TObject);
Lies dir doch bitte mal das Tutorial durch und kapiere es doch und wenn nicht, dann frage dazu etwas... ;) |
Re: speichern von var
ich habs jetzt auf Fini geändert aber es funktioniert immer noch nicht. könnte mir jemand bitte den
gesamten quellcode umändern wie er dann aussehen müsste, bitte? das wäre wrklich hilfreich... danke im vorraus tom |
Re: speichern von var
Was passiert denn? Compiliert er nicht wenn ja, was sagt er? Oder Startet er und lädt, bzw speichert nich.
Sorry meine Kristallkugel ist nämlich grad in reperatur |
Re: speichern von var
kompilieren funktioniert und auch das speichern läuft einwandfrei. nur wenn ich die variablen wieder aus der ini datei laden will bekomme ich immer 0 den variablen zugewiesen :(
|
Re: speichern von var
Delphi-Quellcode:
ein Versuch
unit umfrage;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles; type TForm1 = class(TForm) Label1: TLabel; choosedrg: TRadioGroup; votebtm: TButton; procedure votebtmClick(Sender: TObject); procedure FormShow(sende:TObject); private Fini:TIniFile: public { Public-Deklarationen } end; var Form1: TForm1; a,b,c,d,e,f,ap,bp,cp,dp,ep,fp,x:double; implementation {$R *.dfm} procedure TForm1.Form1Create(sender:TObject); begin Fini := TIniFile.Create(ExtractFilepath(paramstr(0)+'ergebnis.ini'); a:=Fini.ReadFloat('frage1','wert1',0); b:=Fini.ReadFloat('frage1','wert2',0); c:=Fini.ReadFloat('frage1','wert3',0); d:=Fini.ReadFloat('frage1','wert4',0); e:=Fini.ReadFloat('frage1','wert5',0); f:=Fini.ReadFloat('frage1','wert6',0); end; procedure TForm1.votebtmClick(Sender: TObject); begin case choosedrg.ItemIndex of 0:a:=a+1; 1:b:=b+1; 2:c:=c+1; 3:d:=d+1; 4:e:=e+1; 5:f:=f+1; end; x:=a+b+c+d+e+f; ap:=a*100/x; bp:=b*100/x; cp:=c*100/x; dp:=d*100/x; ep:=e*100/x; fp:=f*100/x; // Fini:=TIniFile.create(ExtractFilePath (ParamStr(0))+'ergebnis.ini'); wurde bereits in onCreate erstellt Fini.WriteFloat('frage1', 'wert1', a); Fini.WriteFloat('frage1', 'wert2', b); Fini.WriteFloat('frage1', 'wert3', c); Fini.WriteFloat('frage1', 'wert4', d); Fini.WriteFloat('frage1', 'wert5', e); Fini.WriteFloat('frage1', 'wert6', f); end; procedure TForm1.Form1Destroy(Sender: TObject); begin FreeAndNil(Fini); end; end. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 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