![]() |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
.. 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 |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
.. neuer Versuch:
Delphi-Quellcode:
FDataList.Items[0] as TName gibt doch eine Klasseninstanz zurück.
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; Es sollte daher nicht notwendig sein die Instanz Names noch zusätzlich zu erstellen. Also so:
Delphi-Quellcode:
Grüße
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; Klaus |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
Hmm..
Delphi-Quellcode:
Also gleich richtig machen..
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; Oben in der Form kannst Du bei
Delphi-Quellcode:
das 'var' löschen...
private
{ Private-Deklarationen } var FDataList:TMyobjectlist; public 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:
dein laden sieht dann so aus: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;
Delphi-Quellcode:
Jetzt nur noch ein Button für Vor:
procedure TForm1.ladenClick(Sender: TObject);
begin FDatalist.LoadFromFile('e:\test\daten.dat'); // Laden der Liste FAktuelerIndex := 0; // Auf ersten Datensatz setzen ZeigeDaten; //Anzeigen end;
Delphi-Quellcode:
und eine für Zurück
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;
Delphi-Quellcode:
Und schon kannst DU durch die Datensätze navigieren...
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; Jetzt noch dein speichern reparieren:
Delphi-Quellcode:
und noch einen Button für einen Leeren Datensatz
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;
Delphi-Quellcode:
Um den aktuellen Datensatz aus der Liste zu löschen genügt ein weiterer Button:
procedure TForm1.ButtonLeerClick(Sender: TObject);
begin init; FAktuelerIndex := -1; // Auf nicht Vorhandenen Datensatz setzen end;
Delphi-Quellcode:
Was jetzt noch fehlt sind Sicherheitsüberprüfungen beim Laden/ZeigeDaten wenn die Liste leer ist...
procedure TForm1.ButtonLoeschenrClick(Sender: TObject);
begin FDatalist.Delete(FAktuelerIndex); // Aktuellen Datensatz aus Liste löschen FAktuelerIndex := 0; // Auf ersten Satz setzen ZeigeDaten; end; Aber etwas musst Du ja auch noch machen.... ;) (Aus dem Kopf ohne Delphi herunter getippt, also keine Garantie auf Fehlerfreiheit ;) ) |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
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:) |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
Hmm...
und mit
Delphi-Quellcode:
kannst Du neuen Datensätze anhängen oder eben den gerade gewählten verändert speichern...
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; (Aus dem Kopf ohne Delphi herunter getippt, also keine Garantie auf Fehlerfreiheit ) |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
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:
hängt das evtl mit FAktuelerIndex -Werten zusammen? Wert -1 - lege neuen Datensatz an? Index 0 ist der erste DS.
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; wäre ein FDatalist.Insert hilfreich? |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
Hmm..
Hänge mal den kompletten Sourcecode ein , nicht nur pas und dpr.. ;) Es fehlt vom Formular die dfm.. |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
Liste der Anhänge anzeigen (Anzahl: 1)
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 ;) ) |
AW: Mit savetoFile/loadfromFile Daten ins Formular bringen
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 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