Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datenspeicherung in *-csv Datei (https://www.delphipraxis.net/81998-datenspeicherung-%2A-csv-datei.html)

moperswings 6. Dez 2006 13:21


Datenspeicherung in *-csv Datei
 
Hallo,

der folgende Code funktioniert. Ich möchte nur, dass Ihn mal jemand kurz gegenliest!
In ein Formular sollen - in diesem Demo-Beispiel - aus Textfeldern und Comboboxen Werte in die Datei datensatz.csv gespeichert werden.
Ist das so OK - und vor allem SICHER? Gibt´s Verbesserungsvorschläge?
Viele Grüsse, moperswings

Delphi-Quellcode:
// Setzt die Eingaben alle zurück
procedure TForm1.resetClick(Sender: TObject);
begin
        edit1.Text := '';
        combobox1.ItemIndex := -1;
end;

// speichert die Werte in eine Textdatei
procedure TForm1.speichernClick(Sender: TObject);
var
        f: Textfile;
        wert1: string;
        wert2: string;
        filename: string;
begin
        try
        filename := 'datensatz.csv';
        AssignFile(f, filename);
         {$i-}
        append(f);
        {$i+}
        if IOResult <> 0 then begin
        ShowMessage('Fehler');
        Exit;
        end;
         
        wert1 := Edit1.Text;
        wert2 := ComboBox1.Text;

        Writeln(f, Edit1.Text + ';' + ComboBox1.Text + ';' );

        Closefile(f);
        except
        showmessage('Ein Fehler ist aufgetreten');
        end;
end;

Klaus01 6. Dez 2006 13:58

Re: Datenspeicherung in *-csv Datei
 
Aus meiner Sicht, kannst Du auf den try except Block verzichten,
weil Du ja scho alle möglichen Dateizugriffsfehler mit {$I-} und {$I+}
abfängst.
Grüße
Klaus

Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var
  f: Textfile;
  wert1: string;
  wert2: string;
 filename: string;
begin
  filename := 'datensatz.csv';
  AssignFile(f, filename);
  {$i-}
     if FileExists(fileName) then
       append(f)
     else
       rewrite(f);
  {$i+} 
  if IOResult = 0 then
    begin
       
      Writeln(f, Edit1.Text + ';' + ComboBox1.Text + ';' );

      Closefile(f);
     end
   else
     showmessage('Ein Fehler ist aufgetreten');
end;

moperswings 6. Dez 2006 14:59

Re: Datenspeicherung in *-csv Datei
 
Danke für die Tipps, moperswings

himitsu 6. Dez 2006 15:10

Re: Datenspeicherung in *-csv Datei
 
Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var
  f: Textfile;
  wert1: string;
  wert2: string;
filename: string;
begin
  filename := 'datensatz.csv';
  AssignFile(f, filename);

  IOResult; // IOResult zurücksetzen
  // oder, wenn Funktuionen nicht ohne Ergegniszuweisung aufgerufen werden dürfen
  // if IOResult = 0 then ;

  {$i-} 
     if FileExists(fileName) then
        append(f)
     else
        rewrite(f);
     Writeln(f, Edit1.Text + ';' + ComboBox1.Text + ';' );
     Closefile(f);
  {$i+} 
  if IOResult <> 0 then
     showmessage('Ein Fehler ist aufgetreten');
end;
WriteLn fühlt sich ohne Fehlerbehandlung (innerhalb {$i-} und {$i+}) auch ganz wohl ... vorallem bei Schreibfehlern (z.B. voller Datenträger)

PS: zu beachten ist, daß die Fehlernummer von IOResult immer nur dann zurückgesetzt wird, wenn dieses aufgerufen wurde.
Also alle I/O-Fehler (natürlich nur die Fehlernummer des Letzten) vor dessen Aufruf werden beachtet.

Muetze1 6. Dez 2006 16:41

Re: Datenspeicherung in *-csv Datei
 
Nachtrag:

Delphi-Quellcode:
Var
  lError: Integer;
...
Begin
...

  lError := IOResult;
  If ( lError <> 0 ) Then
    ShowMessage('Es ist folgender Fehler aufgetreten: ' + SysErrorMessage(lError));
End;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 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