Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi speichern von var (https://www.delphipraxis.net/66085-speichern-von-var.html)

Frodo_Beutlin 24. Mär 2006 13:43


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

Flare 24. Mär 2006 13:47

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

Frodo_Beutlin 24. Mär 2006 13:56

Re: brauche dringend hilfe!!
 
wie man etwas im code speichern kann
und auch in einer datei(zb, .text)


mfg tom

Sharky 24. Mär 2006 14:01

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 Delphi-Referenz durchsuchenTIniFile bzw. schaue Dir die Beispiele in der OnlineHilfe an (ich hoffe es gibt dort welche).

Flare 24. Mär 2006 14:03

Re: brauche dringend hilfe!!
 
Ich habe jetzt aber nicht Lust dir zu erklären wie man Vaiablen benutzt...
Delphi-Quellcode:
var Form1: TForm1;
    zahl1,zahl2: integer;
Das zum deklarieren.
Benutzen kannst du sie so:
Delphi-Quellcode:
zahl1 := 3;
zahl2 := zahl1 + 5;
Form1.Caption := IntToStr(zahl2);
Für die Dateien suche mal in der DP!


Flare

himitsu 24. Mär 2006 14:11

Re: brauche dringend hilfe!!
 
Zitat:

Zitat von Sharky
(ich hoffe es gibt dort welche).

In D4 gibt es welche, also sollte es die in späteren Versionen auch noch geben :roll:

Frodo_Beutlin 24. Mär 2006 14:12

Re: brauche dringend hilfe!!
 
wie man variablen benutz weis ich :???:


i weis nur nicht wie ich sie speichern kann :(

Der_Unwissende 24. Mär 2006 14:25

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

Frodo_Beutlin 24. Mär 2006 14:44

Re: speichern von var
 
könnt ihr mir links gebn wo ich das nachlesen kann?


wie kann ich es nun im quelltext speichern?

Waldteufel 24. Mär 2006 14:57

Re: speichern von var
 
Hi Frodo. :hi:

Hier ein Tutorial zu Ini-Dateien: http://www.dsdt.info/tutorials/ini/
Aber was du mit "im Quellcode speichern" meinst, verstehe ich nicht... :gruebel:

Flare 24. Mär 2006 15:09

Re: speichern von var
 
Ich hab im Quellcode "speichern" angesprochen, damit meinte ich aber eigentlich die Benutzung von Variablen.


Flare

Hador 24. Mär 2006 15:12

Re: speichern von var
 
Du könntest dass ganze auch folgendermaßen machen.
Das ist - finde ich - bei wenigen Daten noch einfacher:

Delphi-Quellcode:
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.
Das ist mal 'n komplettes Beispielprogramm.

Flare 24. Mär 2006 15:17

Re: speichern von var
 
@Hador

Warum stellst du hier Pascal-Code rein wenn es um Win32 Delphi geht?


Flare

Hador 24. Mär 2006 15:21

Re: speichern von var
 
:shock: :shock: :shock:
Das IST Object Pascal (Delphi Win32) Code

Zitat:

Zitat von Flare
Ich habe jetzt aber nicht Lust dir zu erklären wie man Vaiablen benutzt...

Und ich keine Lust dir zu erklären, warum das so ist

Sharky 24. Mär 2006 17:29

Re: speichern von var
 
Und ich bitte euch beim Thema zu bleiben und alles andere via PM zu klären.
Danke.

Frodo_Beutlin 24. Mär 2006 20:49

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

Brüggendiek 24. Mär 2006 21:39

Re: speichern von var
 
Hallo Tom!

Schau Dir doch mal Deinen Code genau an:
Delphi-Quellcode:
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;
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.

Schreibe in beiden Fällen:
Delphi-Quellcode:
ini:=TIniFile.Create(ExtractFilePath (ParamStr(0))+'ergebnis.ini');
Außerdem ist es unnötig, die Variable "ini" global zu deklarieren. Deklariere sie jeweils in den Methoden, in denen sie benutzt wird.

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!

Frodo_Beutlin 26. Mär 2006 16:55

Re: speichern von var
 
jetzt habe ich das geändert jedoch funktioniert es immer noch nicht :?

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(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.
tg tom

Frodo_Beutlin 26. Mär 2006 18:33

Re: speichern von var
 
kann mir bitte jemand helfen?!?!?!?!?!

Waldteufel 26. Mär 2006 18:49

Re: speichern von var
 
Sag mal, verstehst du überhaupt, was du da schreibst? :wall: :wall: :wall:

Delphi-Quellcode:
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'D:\Office\Delphi\Umfragen\umfragepr.exeergebnis.ini');
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.

Und bevor ich jetz noch nen Herzinfarkt bekomme:
Delphi-Quellcode:
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'ergebnis.ini');
So müssen beide Zeilen lauten (sowohl 35 als auch 65).

Außerdem darf man erst nach 24 Stunden pushen. :warn:

Hador 26. Mär 2006 18:51

Re: speichern von var
 
Zitat:

Zitat von Frodo_Beutlin
Delphi-Quellcode:
ini:=TIniFile.create(ExtractFilePath (ParamStr(0))+'D:\Office\Delphi\Umfragen\umfragepr.exeergebnis.ini');

Delphi-Quellcode:
ExtractFilePath (ParamStr(0))
liefert schon den Absoluten Pfad zu deinem Projekt, so dass du ihn nicht noch einmal angeben musst.
also:
Delphi-Quellcode:
ini:=TIniFile.create(ExtractFilePath (ParamStr(0))+'umfragepr.exeergebnis.ini');
Auch solltest du auf den Gebrauch von globalen Variablen verzichten

EDIT:
Ich glaub der rote Kasten hat Urlaub :gruebel:

Und bitte erst nach 24h pushen!

Frodo_Beutlin 26. Mär 2006 19:25

Re: speichern von var
 
erstmal sorry fürs pushen hab ich nicht gewusst..

soll ich jetzt bei beiden zeilen

Delphi-Quellcode:
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'umfragepr.exeergebnis.ini');
oder

Delphi-Quellcode:
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'ergebnis.ini');
schreiben?

bladecs 26. Mär 2006 19:36

Re: speichern von var
 
also ich würde

Delphi-Quellcode:
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'ergebnis.ini');
nehmen. Nimm den Namen, der für dich passender erscheint.

Frodo_Beutlin 26. Mär 2006 19:52

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?

Christian Seehase 26. Mär 2006 20:38

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:
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;
Da man Datenbereiche von Objekten als Felder bezeichnet, bekommen diese, üblicherweise, den Präfix F, es funktioniert natürlich auch ohne.

Frodo_Beutlin 26. Mär 2006 20:50

Re: speichern von var
 
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
    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.
müsste dies dann so ausseheb?

xZise 26. Mär 2006 21:07

Re: speichern von var
 
Nein!
In der
Delphi-Quellcode:
procedure TForm1.votebtmClick(Sender: TObject);
hast du "ini" und nicht "FIni" genommen!
Außerdem reicht es bei deiner Variante die Datei nur einmal zu Createn.

Also in der
Delphi-Quellcode:
procedure TForm1.votebtmClick(Sender: TObject);
Das
Delphi-Quellcode:
ini := TIniFile.Create(...);
wegnehmen

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... ;)

Frodo_Beutlin 27. Mär 2006 19:11

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

inherited 27. Mär 2006 19:37

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

Frodo_Beutlin 28. Mär 2006 12:51

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

Klaus01 28. Mär 2006 13:01

Re: speichern von var
 
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
    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.
ein Versuch

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