![]() |
Re: ListView und Textdatei
So, die Fehlermeldung konnte ich abschalten. Nur habe ich jetzt das Problem, dass die Werte nicht mehr in die Textdatei geschrieben werden.
Code:
Delphi-Quellcode:
Gibt es ggf. noch Verbesserungsvorschläge zu dem Code?
unit Kundenhinzufuegen;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm_Kundenhinzufuegen = class(TForm) L_KdNr: TLabel; GB_Kundendaten: TGroupBox; E_Firma: TEdit; E_Nachname: TEdit; L_Firma: TLabel; L_Nachname: TLabel; L_Vorname: TLabel; GB_Anschrift: TGroupBox; L_Strasse: TLabel; L_Plz: TLabel; L_Ort: TLabel; E_Strasse: TEdit; E_Plz: TEdit; E_Vorname: TEdit; E_Ort: TEdit; L_Land: TLabel; GB_Kontakt: TGroupBox; L_Telefon: TLabel; L_Fax: TLabel; L_Mobiltelefon: TLabel; L_eMail: TLabel; E_Telefon: TEdit; E_Fax: TEdit; E_Mobiltelefon: TEdit; E_eMail: TEdit; GroupBox1: TGroupBox; M_Ansprechpartner: TMemo; CB_Land: TComboBox; E_KdNr: TEdit; GroupBox2: TGroupBox; L_Zustaendigkeit: TLabel; L_Auslieferungsdatum: TLabel; E_Zustaendigkeit: TEdit; E_Auslieferungsdatum: TEdit; B_Hinzufuegen: TButton; B_Abbrechen: TButton; Label1: TLabel; E_Planungsende: TEdit; procedure B_HinzufuegenClick(slDaten: TStringList); procedure FormCreate(slDaten: TStringList); procedure B_AbbrechenClick(Sender: TObject); procedure FormDestroy(slDaten: TStringList); private function NeueZeile: string; . . . function TForm_Kundenhinzufuegen.NeueZeile: string; var sl: TStringList; begin sl := TStringList.Create; sl.Add(E_Firma.Text); sl.Add(E_Nachname.Text); sl.Add(E_Vorname.Text); sl.Add(E_Strasse.Text); sl.Add(E_Plz.Text); sl.Add(E_Ort.Text); sl.Add(CB_Land.Text); sl.Add(E_Telefon.Text); sl.Add(E_Fax.Text); sl.Add(E_Mobiltelefon.Text); sl.Add(E_eMail.Text); sl.Add(E_Zustaendigkeit.Text); sl.Add(E_Auslieferungsdatum.Text); sl.Add(E_Planungsende.Text); sl.Add(M_Ansprechpartner.Text); sl.Add(E_Firma.Text); Result := sl.CommaText; sl.Free; end; procedure TForm_Kundenhinzufuegen.B_HinzufuegenClick(slDaten: TStringList); begin slDaten.Add(NeueZeile); end; procedure TForm_Kundenhinzufuegen.FormCreate(slDaten: TStringList); begin slDaten := TStringList.Create; slDaten.LoadFromFile(ExtractFilePath(Application.ExeName)+'data\kunden.txt'); end; procedure TForm_Kundenhinzufuegen.B_AbbrechenClick(Sender: TObject); begin Close; end; procedure TForm_Kundenhinzufuegen.FormDestroy(slDaten: TStringList); begin slDaten.SaveToFile(ExtractFilePath(Application.ExeName)+'data\kunden.txt'); slDaten.Free; end; MaM |
Re: ListView und Textdatei
Hai MaM,
ich glaube Du hast da ein Verständniss problem ;-) Du erzeugst für jede deiner Methoden eine lokale Version slData deiner TStringList. Damit ist diese natürlich lehr wenn Du sie im OnDestroy speicherst. Du brauchst also eine Instanz von TStringList welche zur gesamten Laufzeit des Programmes vorhanden ist. hier einmal ein Beispiel:
Delphi-Quellcode:
type
TForm_Kundenhinzufuegen = class(TForm) B_Hinzufuegen: TButton; procedure B_HinzufuegenClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } slDaten : TStringList; // Die "globale" Instanz function NeueZeile : string; public { Public-Deklarationen } end; implementation {$R *.dfm} function TForm_Kundenhinzufuegen.NeueZeile: string; var sl: TStringList; begin // . // So wie Du sie hast. // . end; procedure TForm_Kundenhinzufuegen.FormCreate(Sender: TObject); begin slDaten := TStringList.Create; slDaten.LoadFromFile(ExtractFilePath(Application.ExeName)+'data\kunden.txt'); end; procedure TForm_Kundenhinzufuegen.FormDestroy(Sender: TObject); begin slDaten.SaveToFile(ExtractFilePath(Application.ExeName)+'data\kunden.txt'); slDaten.Free; end; procedure TForm_Kundenhinzufuegen.B_HinzufuegenClick(Sender: TObject); begin slDaten.Add(NeueZeile); end; |
Re: ListView und Textdatei
Leider schreibt er dennoch nichts in die Datei.
Delphi-Quellcode:
type
TForm_Kundenhinzufuegen = class(TForm) . . . private { Private-Deklarationen } slDaten : TStringList; // Die "globale" Instanz function NeueZeile: string; . . . function TForm_Kundenhinzufuegen.NeueZeile: string; var sl: TStringList; begin sl := TStringList.Create; sl.Add(E_Firma.Text); sl.Add(E_Nachname.Text); sl.Add(E_Vorname.Text); sl.Add(E_Strasse.Text); sl.Add(E_Plz.Text); sl.Add(E_Ort.Text); sl.Add(CB_Land.Text); sl.Add(E_Telefon.Text); sl.Add(E_Fax.Text); sl.Add(E_Mobiltelefon.Text); sl.Add(E_eMail.Text); sl.Add(E_Zustaendigkeit.Text); sl.Add(E_Auslieferungsdatum.Text); sl.Add(E_Planungsende.Text); sl.Add(M_Ansprechpartner.Text); sl.Add(E_Firma.Text); Result := sl.CommaText; sl.Free; end; procedure TForm_Kundenhinzufuegen.FormCreate(Sender: TObject); begin slDaten := TStringList.Create; slDaten.LoadFromFile(ExtractFilePath(Application.ExeName)+'data\kunden.txt'); end; procedure TForm_Kundenhinzufuegen.FormDestroy(Sender: TObject); begin slDaten.SaveToFile(ExtractFilePath(Application.ExeName)+'data\kunden.txt'); slDaten.Free; end; procedure TForm_Kundenhinzufuegen.B_HinzufuegenClick(Sender: TObject); begin slDaten.Add(NeueZeile); end; procedure TForm_Kundenhinzufuegen.B_AbbrechenClick(Sender: TObject); begin Close; end; MaM |
Re: ListView und Textdatei
Zitat:
|
Re: ListView und Textdatei
Nein, auch das hat nicht funktioniert.
Habe das ganze jetzt erstmal so umgebaut. Da ich Zugriffsfehlermeldungen bekommen hatte. Nachdem ich die Form geschlossen habe.
Delphi-Quellcode:
procedure TForm_Kundenhinzufuegen.B_HinzufuegenClick(Sender: TObject);
begin slDaten := TStringList.Create; slDaten.LoadFromFile(ExtractFilePath(Application.ExeName)+'data\kunden.txt'); try slDaten.Add(NeueZeile); slDaten.SaveToFile(ExtractFilePath(Application.ExeName)+'data\kunden.txt'); finally slDaten.Free; end; end; MaM |
Re: ListView und Textdatei
*schieb*
MaM |
Re: ListView und Textdatei
Hi MaM,
überlege doch mal mit: Für die Pflege eines Kundenstammes hast du normalerweise eine MainForm, auf der alle Kunden visualisiert werden (ListView?) und einen KundenDialog, auf dem die Detailinformationen zu einem Kunden erfasst oder bearbeitet werden können. Außerdem brauchst du so etwas wie ein Datenmodul - eine normale Unit ist OK, solange du mit der Speicherung deiner Kundendaten in einer Textdatei experimentierst. Die StringList, mit der du die Kundendaten im Hauptspeicher verwaltest, gehört dann in dieses Datenmodul, damit von der MainForm und vom KundenDialog darauf zugegriffen werden kann. Kriegst du das hin? Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 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