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 2 von 2     12   
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 26. Nov 2018, 19:18
.. mit SaveToFile wird die Datei wieder überschrieben.
Wenn Du mehrere "Datensätze" in das File schreiben willst
musst Du den schon bestehenden Inhalt vorher wieder einlesen.

Grüße
Klaus
Klaus

Geändert von Klaus01 (26. Nov 2018 um 19:22 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 26. Nov 2018, 19:35
.. neuer Versuch:
Delphi-Quellcode:
rocedure 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;
FDataList.Items[0] as TName gibt doch eine Klasseninstanz zurück.
Es sollte daher nicht notwendig sein die Instanz Names noch zusätzlich zu erstellen.

Also so:
Delphi-Quellcode:
procedure TForm1.ladenClick(Sender: TObject);
var Names:TName;
begin
  FDatalist.LoadFromFile('e:\test\daten.dat');
  try
    Names := FDatalist.Items[0] as TName;
    Edit1.text:=inttostr(Names.ID);
    Edit2.Text:=Names.Name;
    Edit3.text:=Names.Herkunft;
    CheckBox1.Checked:=Names.Geschlecht;
  except
    // do error handling
  end;
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
HolgerX

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

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 26. Nov 2018, 20:04
Hmm..

Delphi-Quellcode:
rocedure TForm1.ladenClick(Sender: TObject);
var Names:TName;
begin
  Names:=TName.create; // Wieso ein NEUES machen..
  try
    FDatalist.LoadFromFile('e:\test\daten.dat');
    Names := FDatalist.Items[0] as TName; // ... Es wird doch aus der Liste geholt und dass NEUE ins Nirvana geschickt..
    Edit1.text:=inttostr(Names.ID);
    Edit2.Text:=Names.Name;
    Edit3.text:=Names.Herkunft;
    CheckBox1.Checked:=Names.Geschlecht;
  finally
    FreeAndNil(Names); // Und hier wird sogar das aus der Liste gleich gekillt
  end;
end;
Also gleich richtig machen..

Oben in der Form kannst Du bei

Delphi-Quellcode:
 private
    { Private-Deklarationen }
    var FDataList:TMyobjectlist;

  public
das 'var' löschen...

füge dort noch hinzu

Delphi-Quellcode:
 private
    { Private-Deklarationen }
    FDataList:TMyobjectlist;
    FAktuelerIndex : integer; //<-- Index des aktuellen Satzes
    procedure ZeigeDaten;
  public

und noch das:

Delphi-Quellcode:
 
procedure TForm1.ZeigeDaten;
var
  Names:TName;
begin
  // holen des aktuellen Satzes aus der Liste und Anzeigen
  Names := FDatalist.Items[FAktuelerIndex] as TName;
  Edit1.text:=inttostr(Names.ID);
  Edit2.Text:=Names.Name;
  Edit3.text:=Names.Herkunft;
  CheckBox1.Checked:=Names.Geschlecht;
end;
dein laden sieht dann so aus:

Delphi-Quellcode:
procedure TForm1.ladenClick(Sender: TObject);
begin
  FDatalist.LoadFromFile('e:\test\daten.dat'); // Laden der Liste
  FAktuelerIndex := 0; // Auf ersten Datensatz setzen
  ZeigeDaten; //Anzeigen
end;
Jetzt nur noch ein Button für Vor:
Delphi-Quellcode:
procedure TForm1.ButtonVorClick(Sender: TObject);
begin
  inc(FAktuelerIndex); // Nächster Datensatz
  if FAktuelerIndex >= FDatalist.Count then
    FAktuelerIndex := 0; // Wieder von vorne beginnen, wenn bereits letzter gewesen
  ZeigeDaten;
end;
und eine für Zurück
Delphi-Quellcode:
procedure TForm1.ButtonRueckClick(Sender: TObject);
begin
  inc(FAktuelerIndex, -1); // Vorheriger Datensatz
  if FAktuelerIndex < 0 then
    FAktuelerIndex := FDatalist.Count-1; // Wieder vom letzten beginnen, wenn bereits am Anfang
  ZeigeDaten;
end;
Und schon kannst DU durch die Datensätze navigieren...

Jetzt noch dein speichern reparieren:

Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var Names: TName;
begin
  Names:=TName.create; // Neues Object erstellen
  try
    // Daten aus Controls holen
    Names.ID:=strtoint(Edit1.text);
    Names.Name:=edit2.text;
    Names.Herkunft:=Edit3.text;
    Names.Geschlecht:=checkBox1.Checked;
    FDatalist.Add(Names); // An die Liste Anhängen
    FDatalist.SaveToFile('e:\Test\daten.dat'); // Speichern

    FAktuelerIndex := FDatalist.Count-1; // Auf den letzten Datensatz setzen

    ZeigeDaten; // Könnte man auch sparen, nur zur Sicherheit ;)
  finally
// FreeAndNil(Names); // <- NICHT löschen!!! Denn das Object ist ja in der Liste !!!
  end;
end;
und noch einen Button für einen Leeren Datensatz
Delphi-Quellcode:
procedure TForm1.ButtonLeerClick(Sender: TObject);
begin
  init;
  FAktuelerIndex := -1; // Auf nicht Vorhandenen Datensatz setzen
end;
Um den aktuellen Datensatz aus der Liste zu löschen genügt ein weiterer Button:

Delphi-Quellcode:
procedure TForm1.ButtonLoeschenrClick(Sender: TObject);
begin
  FDatalist.Delete(FAktuelerIndex); // Aktuellen Datensatz aus Liste löschen
  FAktuelerIndex := 0; // Auf ersten Satz setzen
  ZeigeDaten;
end;
Was jetzt noch fehlt sind Sicherheitsüberprüfungen beim Laden/ZeigeDaten wenn die Liste leer ist...
Aber etwas musst Du ja auch noch machen....

(Aus dem Kopf ohne Delphi herunter getippt, also keine Garantie auf Fehlerfreiheit )
  Mit Zitat antworten Zitat
EdAdvokat

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

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 26. Nov 2018, 21:05
HolgerX Klasse!!!
ich habe es probiert und nach ersten Erkenntnissen klappt es. Das werde ich ganz intensiv durchgehen und nachvollziehen.
Ich bin wirklich dankbar für diese Hilfe, denn allein hätte ich das nicht hinbekommen.
Wenn noch Fragen auftreten würde ich mich melden - aber erst morgen.
nochmals Danke
Norbert
  Mit Zitat antworten Zitat
HolgerX

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

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 27. Nov 2018, 05:34
Hmm...

und mit

Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var Names: TName;
begin
  if FAktuelerIndex > -1 then
    Names := FDatalist.Items[FAktuelerIndex] as TName; // Aktuelles Object bearbeiten
  else
    Names:=TName.create; // Neues Object erstellen


  try
    // Daten aus Controls holen
    Names.ID:=strtoint(Edit1.text);
    Names.Name:=edit2.text;
    Names.Herkunft:=Edit3.text;
    Names.Geschlecht:=checkBox1.Checked;

    if FAktuelerIndex = -1 then begin
      FDatalist.Add(Names); // Nur an die Liste Anhängen, wenn neu
      FAktuelerIndex := FDatalist.Count-1; // Auf den letzten Datensatz setzen
    end;

    FDatalist.SaveToFile('e:\Test\daten.dat'); // Speichern

    ZeigeDaten; // Könnte man auch sparen, nur zur Sicherheit ;)
  except
    on E:Exception do
      ShowMessage(E.Message);
  end;
end;
kannst Du neuen Datensätze anhängen oder eben den gerade gewählten verändert speichern...

(Aus dem Kopf ohne Delphi herunter getippt, also keine Garantie auf Fehlerfreiheit )
  Mit Zitat antworten Zitat
EdAdvokat

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

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 27. Nov 2018, 11:11
Hallo HolgerX Irgendwie ist doch noch der Wurm drin, denn wenn ich einen neuen Datensatz hinzufügen möchte beispielsweise über leeren DS erhalte ich eine Fehlermeldung und die gespeicherten DS sind futsch.
Ich kann die erstellten DS laden und vor- zurück navigieren - alles ok. Nur wenn ich wie auch immer einen Datensatz hinzufügen möchte gibt es Ärger.
anbei die aktuelle Version
Angehängte Dateien
Dateityp: zip test2.zip (3,5 KB, 4x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
EdAdvokat

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

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 27. Nov 2018, 14:09
Das Problem besteht beim speichern sowohl beim Abändern eines bestehenden DS als auch beim Anlegen eines neuen DS. Er wirft die Excecption:
---------------------------
ptest2
---------------------------
Zugriffsverletzung bei Adresse 005EDF6D in Modul 'pTest2.exe'. Lesen von Adresse 00000000.
---------------------------
OK
---------------------------
und die daten.dat steht auf 0, ist also futsch.
Es muss doch wohl an der Procedure speichern liegen.

Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var Names: TName;
begin
  if FAktuelerIndex > -1 then
    Names := FDatalist.Items[FAktuelerIndex] as TName // Aktuelles Object bearbeiten
  else
    Names:=TName.create; // Neues Object erstellen
  try
    // Daten aus Controls holen
    Names.ID:=strtoint(Edit1.text);
    Names.Name:=edit2.text;
    Names.Herkunft:=Edit3.text;
    Names.Geschlecht:=checkBox1.Checked;

    if FAktuelerIndex = -1 then begin
      FDatalist.Add(Names); // Nur an die Liste Anhängen, wenn neu
      FAktuelerIndex := FDatalist.Count-1; // Auf den letzten Datensatz setzen   
    end;

    FDatalist.SaveToFile('e:\Test\daten.dat'); // Speichern

    ZeigeDaten; // Könnte man auch sparen, nur zur Sicherheit ;)
  except
    on E:Exception do
      ShowMessage(E.Message);
  end;
hängt das evtl mit FAktuelerIndex -Werten zusammen? Wert -1 - lege neuen Datensatz an? Index 0 ist der erste DS.
wäre ein FDatalist.Insert hilfreich?
Norbert
  Mit Zitat antworten Zitat
HolgerX

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

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 27. Nov 2018, 14:35
Hmm..

Hänge mal den kompletten Sourcecode ein , nicht nur pas und dpr..
Es fehlt vom Formular die dfm..
  Mit Zitat antworten Zitat
HolgerX

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

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 27. Nov 2018, 15:10
Hmm..

OK, hab mir nen Testformular gebastelt...

Ich konnte nur einen Fehler in der daten.pas finden, beim Laden...

Es wurde das count von der Objectliste gesetzt und dann pern Insert weitere Objecte hinzugefügt, somit waren im Anschluss doppelt so viele Objecte in der Liste, wie es eigentlich sein sollten und die hälfte nur 'nil'...
Nachdem ich das Count nicht mehr gesetzt habe und aus insert ein add gemacht habe, lief es..


(Erstellt und getestet mit D6 )
Angehängte Dateien
Dateityp: zip TEST_FileSave.zip (1,38 MB, 5x aufgerufen)
  Mit Zitat antworten Zitat
EdAdvokat

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

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 27. Nov 2018, 15:32
HolgerX ich danke dir, denn ich habe an der Methode speichern herumgedoktert mit der neuen Variante und dann mit der von gestern abend, doch auf die unit daten wäre ich nicht gekommen und da habe ich mich auch nicht rangetraut.
Jedenfalls sieht es jetzt wesentlich besser aus und ich werde alle möglichen eingaben probieren.
Nochmals Danke für die Hilfe und ich habe wieder was dazugelernt, auch wenn ich nunmehr auf die 70 zugehe.
Norbert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:42 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