AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datenspeicherung in *-csv Datei

Ein Thema von moperswings · begonnen am 6. Dez 2006 · letzter Beitrag vom 6. Dez 2006
Antwort Antwort
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#1

Datenspeicherung in *-csv Datei

  Alt 6. Dez 2006, 13:21
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;
  Mit Zitat antworten Zitat
Klaus01

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

Re: Datenspeicherung in *-csv Datei

  Alt 6. Dez 2006, 13:58
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;
Klaus
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#3

Re: Datenspeicherung in *-csv Datei

  Alt 6. Dez 2006, 14:59
Danke für die Tipps, moperswings
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#4

Re: Datenspeicherung in *-csv Datei

  Alt 6. Dez 2006, 15:10
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Datenspeicherung in *-csv Datei

  Alt 6. Dez 2006, 16:41
Nachtrag:

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

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


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 15:22 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