AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Mit savetoFile/loadfromFile Daten ins Formular bringen
Thema durchsuchen
Ansicht
Themen-Optionen

Mit savetoFile/loadfromFile Daten ins Formular bringen

Ein Thema von EdAdvokat · begonnen am 25. Nov 2018 · letzter Beitrag vom 27. Nov 2018
Antwort Antwort
Seite 1 von 2  1 2      
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 25. Nov 2018, 11:35
Delphi-Version: 10.2 Tokyo
Ich probiere mal wieder und komme nicht weiter. Ich bin relativ unbedarft auf dieser Strecke.
Die unit von Taladan habe ich im Forum gefunden:

https://www.delphipraxis.net/47970-t...speichern.html

Dazu habe ich für die dort def. Felder (ID,Name,Herkunft,Geschlecht) auf meiner Formular-unit entsprechende
edit-Komponenten eingerichtet.
mit den Methoden savetofile/loadfromFile möchte ich also eingegebene Daten nach z.B e:\test\daten.dat speichern und
von dort dann mit loadfromfile wieder ins Formular aufnehmen. Sicher wohl eine ganz einfache Art und Weise, doch es
klappt einfach nicht.
Beim savetoFile kommt ein Datensatz an und wird gespeichert. Weitere Datensätze werden nicht gespeichert.
Beim Aufruf loadfromFile erhalte ich lediglich den Wert für die ID mit 0. Die anderen Felder werden nicht gefüllt.
Wo klemmt es da bei mir? anbei meine stümperhaften Versuche:
Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var FileN :string;
begin
  Name:=TName.create;
  Name.ID:=strtoint(Edit1.text);
  Name.Name:=edit2.text;
  Name.Herkunft:=Edit3.text;
  Name.Geschlecht:= true; //checkBox1.Checked;
  objectlist.Add(Name);
  objectlist.SaveToFile('e:\Test\daten.dat');
  init;
end;

procedure TForm1.ladenClick(Sender: TObject);
var FileN:string;
begin
  objectlist.LoadFromFile('e:\test\daten.dat');
  Edit1.text:=inttostr(Name.ID);
  Edit2.Text:=Name.Name;
  Edit3.text:=Name.Herkunft;
  CheckBox1.Checked:=Name.Geschlecht;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Name:=TName.Create;
  Objectlist:=TMyObjectList.create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Name.free;
  objectlist.Free;
end;
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#2

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 25. Nov 2018, 13:07
Moin,

bevorzugen würde ich Objeklisten, wenn ganze Objekte gespeichert werden sollen.
Deine Aufgabe scheint hier zu sein, verschiedene Eigenschaften unterschiedlichster
Objekte zu befüllen, zu sichern. Da neige ich zur bewährten StringList zu greifen.
Hier einige Beispiele

1. Laden / Speichern
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  tempStringList : TStringList;
  fileName : String;
begin
  fileName := 'c:\temp\myfile.txt';
  tempStringList := TStringList.Create;
  try
    tempStringList.LoadFromFile(fileName); {Load string from text file}
    showmessage( tempStringList.Text);
    tempStringList.SaveToFile(fileName); {save the text in a file }
  finally
    tempStringList.Free;
  end;
end;
2. Quellcodebasiertes Befüllen
Delphi-Quellcode:
ar
  animals : TStringList; // Define our string list variable
  i : Integer;
begin
  // Define a string list object, and point our variable at it
  animals := TStringList.Create;

  // Now add some names to our list
  animals.Add('Cat');
  animals.Add('Mouse');
  animals.Add('Giraffe');

  // Now display these animals
  for i := 0 to animals.Count-1 do
    ShowMessage(animals[i]); // animals[i] equates to animals.Strings[i]

  // Free up the list object
  animals.Free;
end;
3, Befüllen / Auslesen von Namen und zugehörigen Werten
Delphi-Quellcode:
var
  names : TStringList; // Define our string list variable
  ageStr : String;
  i : Integer;
begin
  // Define a string list object, and point our variable at it
  names := TStringList.Create;

  // Now add some names to our list
  names.CommaText := 'Neil=45, Brian=63, Jim=22';

  // And now find Brian's age
  ageStr := names.Values['Brian'];

  // Display this value
  ShowMessage('Brians age = '+ageStr);

  // Now display all name and age pair values
  for i := 0 to names.Count-1 do
  begin
    ShowMessage(names.Names[i]+' is '+names.ValueFromIndex[i]);
  end;

  // Free up the list object
  names.Free;
end;

4. Setzen von Namen-Wert-Kombinationen aus einem String
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  SL: TStringList;
  Temp: string;
  i: Integer;
begin
  SL := TStringList.Create;
  SL.Delimiter := '|';
  SL.QuoteChar := '"';
  SL.StrictDelimiter := True;
  SL.DelimitedText := 'O=0 | ! .!=!.!';
  Temp := 'Count: ' + IntToStr(SL.Count) + #13;
  for i := 0 to SL.Count - 1 do
    Temp := Temp + Format('Name: %s Value: %s'#13,
              [SL.Names[i], SL.ValueFromIndex[i]]);
  ShowMessage(Temp);
end;

Für das Speichern/Laden von einigen Eigenschaften ist das gutn machbar.

Viele Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#3

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 25. Nov 2018, 14:26
Hmm..


Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var FileN :string;
begin
  Name:=TName.create; // NEUES Name-Object wird erstellt
  Name.ID:=strtoint(Edit1.text); // .. befüllt
  Name.Name:=edit2.text; // .. befüllt
  Name.Herkunft:=Edit3.text; // .. befüllt
  Name.Geschlecht:= true; //checkBox1.Checked; // .. befüllt
  objectlist.Add(Name); // Der Liste hinzugefügt
  objectlist.SaveToFile('e:\Test\daten.dat'); // LISTE wird gespeichert
  init;
end;

procedure TForm1.ladenClick(Sender: TObject);
var FileN:string;
begin
  objectlist.LoadFromFile('e:\test\daten.dat'); // LISTE wird geladen
  Edit1.text:=inttostr(Name.ID); // auf 'globales' NAME (nicht aus der Liste) wird zugegriffen
  Edit2.Text:=Name.Name;
  Edit3.text:=Name.Herkunft;
  CheckBox1.Checked:=Name.Geschlecht;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Name:=TName.Create; // Globales NAMES wird erzeugt
  Objectlist:=TMyObjectList.create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Name.free;
  objectlist.Free;
end;
Typisches Copy&Paste ..

Wenn du mit der Liste laden willst, dann solltest Du auch mit NAME aus der 'Liste' arbeiten.
Lösche zunächst erstmal dein globales NAME aus dem src...
und hole dieses beim Laden aus der objectlist..
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 25. Nov 2018, 15:13
Danke HolgerX
ich habe nun die var Name aus dem Formular direkt in die Methode SavetoFile als lokale Variable übernommen und nun sieht diese Methode so aus:
Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var Name: TName;
begin
  Name:=TName.create;
  try
    Name.ID:=strtoint(Edit1.text);
    Name.Name:=edit2.text;
    Name.Herkunft:=Edit3.text;
    Name.Geschlecht:=checkBox1.Checked;
    ObjectList.Add(Name);
    objectlist.SaveToFile('e:\Test\daten.dat');
  init;
  finally
    FreeAndNil(Name);
  end;
end;
weiterhin ist jedoch im Formular noch die var objectlist:TMyobjectlist global deklariert.
Am Ergebnis hat sich jedoch nichts verändert. Weiterhin wird nur ein Datensatz im File gespeichert und im Form aufrufen kann ich es auch nicht.
Ich mache da wohl grundsätzlcih was falsch.
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#5

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 25. Nov 2018, 15:50
Dir fehlt nach dem Laden ein

Name := ObjectListe.Items[index] as tname;

Falls es dann noch Probleme gibt: Wie sieht die gespeicherte Datei aus?
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 25. Nov 2018, 16:16
Danke Olli73.
habe Name := ObjectList.Items[0] as tname; aufgenommen (Index 0)weil er ein Integer wünschte. War das richtig so? Nun wird mein Datensatz
aus dem File geladen und im Form angezeigt. Das geht leider nur mit einem Datensatz ID = 0; Name = Otto; Herkunft = Berlin und Geschlecht= true.
Ein zweiter eingegebener Datenatz überschreibt den ersten. Das Anzeigen des geladenen Datensatzs im Form geht auch nur nach Neuaufruf des Programms. Alles eigentlich nicht so konfortabel.
Ich will nur experimentieren und sicher ist die Arbeit mit einer StringList dafür besser geeignet, doch ich wollte es auch mal mit einer Objectlist versuchen.
Die gespeicherte Datei daten.dat anbei
Angehängte Dateien
Dateityp: zip daten.zip (144 Bytes, 2x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#7

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 25. Nov 2018, 16:49
Hmm..

Ob nun StringList oder die ObjectList ist egal...

Deine Logic funktioniert noch nicht..

z.B.:
( Ausgehend von nur der einen Form )

- Application wird gestartet
- Form.OnShow
-> Daten werden geladen
-> Erster Datensatz wird angezeigt (Index[0]), wenn vorhanden
- Neuer Datensatz anlegen
-> Daten eingeben
-> Fertig (Button Speichern), dann neues TName erzeugen und der Liste anhängen
-> (Eventuell speichern, aber kann auch erst beim Schließen der Form gemacht werden)
- NAVIGATION
Hier brauchst Du 2 Buttons, zum Vor und Zurückgehen durch die Liste
-> Entsprechend des neuen Index den entsprechenden Eintrag (Index[x]) anzeigen
- Form.OnCLose
-> Liste speichern (wenn nicht vorher bei Button Speichern passiert ist)

Es wird also nicht immer wieder geladen!

(Irgendwie habe ich ein Dejavu, war so etwas nicht auch bei den Vocabeln.. )

Also, erstmal eine Logic/Stuktur erstellen, dann für die einzelnen Punkte den Source schreiben, am Besten auch in jeweis separaten procedure/functionen....

Apropo:
Verwende KEINE 'globalen' Variablen, wenn diese nicht (über mehrere Forms) als Globales verwendet werden müssen.
Im hiesigen Fall kann die ObjectList als Variable unter private mit z.B. dem Namen FDataList : TObjectlist.

Auch das var Name: TName; ist unglücklich, da 'Name' auch gleich eine propterty vom Form ist...

Geändert von HolgerX (25. Nov 2018 um 16:53 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 26. Nov 2018, 16:31
ich war in der Zwischenzeit nicht untätig und habe mir die ganze Sache nochmals durchdacht.
Ich muss darauf hinweisen, dass ich ein Anfänger und vermutlich ein lausiger Programmierer bin, doch ich mache das einfach für mich und habe
Freude daran, wenn mir was gelingt. Das nur vorweg, damit etwas Verständnis für meine naiven Fragen in eure Gedult und die Antworten einfließen können.
Ja nun zum Anliegen selbst: ich habe die Form und die logic jeweils in eine unit verpackt. Auch die variablen sind private gesetzt.
Zur logic - was will ich erreichen:
- Applikation wird gestartet;
- nach Button Daten laden wird der erste Datensatz in den edit-Feldern angezeigt (ID,Name,Herkunft,Geschlecht)
- Button clear löscht die angezeigten Daten; vermutlich muss ich jedoch die Daten auch freigeben und nicht nur im Form löschen;
- Neuer Datensatz anlegen Daten werden eingegeben, Button Speichern betätigen dann neues TName erzeugen und der Liste (Add) anhängen
- Navigation mit Button vor und Buttun zurück

mehr will ich zunächst nicht erreichen. War das mit Logic gemeint?

Nun die Herkules-Aufgabe: Die Form ist schlicht und einfach drei Editfelder eine checkbox und Button laden Button speichern Button vor und zurück.
Die logic in unit Daten ist die vom Link in #1. Name in Names geändert, damit keine Mißverst. auftreten.
Methode Laden:

Delphi-Quellcode:
procedure TForm1.ladenClick(Sender: TObject);
var Names:TName;
begin
  Names:=TName.create;
  try
    FDatalist.LoadFromFile('e:\test\daten.dat');
    Names := FDatalist.Items[0] as TName;
    Edit1.text:=inttostr(Names.ID);
    Edit2.Text:=Names.Name;
    Edit3.text:=Names.Herkunft;
    CheckBox1.Checked:=Names.Geschlecht;
  finally
    FreeAndNil(Names);
  end;
end;
Methode speichern:

Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var Names: TName;
begin
  Names:=TName.create;
  try
    Names.ID:=strtoint(Edit1.text);
    Names.Name:=edit2.text;
    Names.Herkunft:=Edit3.text;
    Names.Geschlecht:=checkBox1.Checked;
    FDatalist.Add(Names);
    FDatalist.SaveToFile('e:\Test\daten.dat');
  init;
  finally
    FreeAndNil(Names);
  end;
end;

Probleme dabei: ich kann nur einen Datensatz eingeben und wenn abgespeichert wurde, kann so kein neuer eingegeben werden und auch der gespeicherte
nicht geladen werden, da er noch in Verwendung ist. Also müßte er für die Neueingabe eines zweiten DS freigegeben werden.
Weitere Handlungen am Programm sind erst nach Neustart des Prog. möglich, z.B. Datensatz laden.
Die Eingabe eines DS überschreibt den bereits gespeicherten DS.- blöd.

Was sollte ich tun? HolgerX schreibt: (Button Speichern), dann neues TName erzeugen und der Liste anhängen.
Das möchte ich auch aber wie?
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 26. Nov 2018, 17:24
Hallo,
könntest Du mal bitte Deinen jetzt-Stand als Projekt ranhängen? Das macht es für faule Kerle wie ich es bin einfacher mal reinzuschauen und nachzuvollziehen wo was in der Logik klemmt.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 26. Nov 2018, 17:51
Hier mein bisheriger Stand.
Angehängte Dateien
Dateityp: zip projekt1.zip (3,5 KB, 6x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 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