AGB  ·  Datenschutz  ·  Impressum  







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

Fehler bei REWRITE

Ein Thema von Chrissi91 · begonnen am 8. Okt 2005 · letzter Beitrag vom 9. Okt 2005
Antwort Antwort
Seite 3 von 7     123 45     Letzte »    
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#21

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 15:15
Zitat von Chrissi91:
Grrr ... Geht dieser Code nun bei existierenen Dateien, die entweder leer oder nicht leer sind (mit Text ) und auch, wenn die Datei nicht existiert?
Probier es doch aus.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#22

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 15:16
Klar geht der Code - ich würde ihn aber anders schreiben - wenn ich es nicht sogar ganz anders machen würde:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
const
  INDEX_FILENAME = 'Eintrage.txt';
var
  tf: TextFile;
  fileName: string;
begin
  fileName := Edit1.Text + ' ' + Edit2.Text + '.txt';
  AssignFile(tf, INDEX_FILENAME);
  if FileExists(INDEX_FILENAME)
    then Append(tf)
    else Rewrite(tf);
  WriteLn(tf, fileName);
  CloseFile(tf);
end;
Die von dir verwendeten Dateioperationen sind veraltet und stammen aus einer Zeit, als es noch keine Netzwerke und vor allem kein Multitasking gab. Unter Windows ist es gang und gäbe, dass du beim Testen eine Datei bearbeitest, die du nebenher in einem Editor offen hältst. Da musst du dann noch jede Menge Code zur Fehlerprüfung einbauen.

Du solltest die Standardnamen deiner Komponenten auf der Form möglichst schnell abändern - Edit1 ist einfach kein guter Name...

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#23

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 16:05
Nur mal so:
Delphi-Quellcode:
function GetIOResultErrString(Error: Integer): String;
begin
  case Error of
      2: Result:= 'Datei nicht gefunden';
      3: Result:= 'Ungültiger Dateiname';
      5: Result:= 'Zugriff verweigert';
     32: Result:= 'Verletzung bei der gemeinsamen Benutzung / kein Filesharing';

    100: Result:= 'EOF / Fehler beim Lesen vom Datenträger';
    101: Result:= 'Festplatte voll / Fehler beim Schreiben auf Datenträger';
    102: Result:= 'Dateivariable nicht zugewiesen';
    103: Result:= 'Datei nicht geöffnet';
    104: Result:= 'Datei nicht für Leseoperationen geöffnet';
    105: Result:= 'Datei nicht für Schreiboperationen geöffnet';
    106: Result:= 'Ungültige Eingabe / Ungültiges numerisches Format';
    107: Result:= 'Datei ist bereits geöffnet';
  end;
end;

procedure TForm.ButtonClick...
var
  fDatei: TextFile;
  FileName: String;
  Err: Integer;
begin
  FileName := 'Eintraege.txt';

  AssignFile(fDatei, FileName);

  {$I-}
  Append(fDatei);
  {$I+}
  Err := IOResult;
  if Err <> 0 then
  begin
    {$I-}
    rewrite(fDatei);
    {$I+}
    Err := IOResult;
  end;

  if Err = 0 then
  begin
    writeln(fDatei, edit1.text + ' ' + edit2.text);
    CloseFile(fDatei);
  end else
  begin
    ShowMessage('Fehler beim öffnen oder schreiben der Datei: "' +
      FileName + '"' + #13#10 +
      '(Fehler #' + IntTostr(Err) + ' - ' + GetIOResultErrString(Err) + ')');
  end;
end;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#24

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 16:14
Oder kürzer:
ShowMessage(SysErrorMessage(GetLastError));
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#25

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 16:20
Zitat von Luckie:
Oder kürzer: [...]
jupp, aber hat man(n) dann noch was zu tippen ? soll ja Grundsätzliches sein mit Aha-Effekt
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#26

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 16:28
Delphi-Quellcode:
assignfile(datei2,'Eintrage.txt');
  if not fileexists('Eintrage.txt') then
  begin
  rewrite(datei2);
  end
  else
  begin
  reset(datei2);
  end;
  closefile (datei2);

  append(datei2);
  writeln(datei2, edit1.Text + ' ' + edit2.Text);
  closefile(datei2);
end;
Hier kommt wieder die Fehlermeldung ...
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#27

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 16:29
Hai Chrissi91,

wie marabu ja schon angemerkt hat sollte man mit [oh]assignfile, Append, Writeln[/oh] und Co nicht mehr arbeiten. Es gibt da viel bessere möglichkeiten. Eine wäre zum Beispiel so:
*gg* Ich weiss, die sieht kompliziert aus. Ist sie aber nicht
Delphi-Quellcode:
resourcestring
  Env_AppData = 'APPDATA';

const
  INDEX_FILENAME = 'Eintrage.txt';

function AppDataDir: string;
begin
  // Result := IncludeTrailingBackslash(GetEnvironmentVariable(ENV_APPDATA));
  Result := ExtractFilePath(ParamStr(0)); // Nur zum Test !!!!
end;

procedure Tfrm_Main.AdressList2Index(aValue: string);
var
  idx_List: TStream;
  mode : Word;
  tmpString: string;
  fileName : string;
begin
  fileName := AppDataDir + INDEX_FILENAME;
  try
    if (FileExists(fileName)) then
      mode := fmOpenReadWrite
    else
      mode := fmCreate;
    idx_List := TFileStream.Create(fileName,mode);
    idx_List.Seek(0,soFromEnd);
    tmpstring := aValue + #10 + #13;
    idx_List.Write(tmpString[1], Length(tmpString));
  finally
    idx_List.Free;
  end;
end;

procedure Tfrm_Main.btn_StoreAdressList2IndexClick(Sender: TObject);
var
  feld1 : string;
  feld2 : string;
begin
  if (dlg_Save_Adresslist.Execute) then
  begin
    feld1 := Edit1.Text;
    feld2 := Edit2.Text;
    AdressList2Index(feld1 + ' ' + feld2);
  end;
end;
Ansonsten solltest Du dir einmal eine Delphi-Referenz durchsuchenTStringList und deren Methoden [oh].Items.LoadFromFile, Items.SaveToFile , Items.Add[/oh] ansehen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#28

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 16:37
Ich versuche es noch einmal zu erkläre , indem ich euch mal die ganze Prozedur zeige. Ich weiß: "Einrücken" Aber das Programm ist noch von früher, wo ich sowas noch nicht gemacht habe. Die Prozedur soll folgendes machen:

Delphi-Quellcode:
procedure TForm2.BitBtn1Click(Sender: TObject);
var
datei, datei2: textfile;
hilf: string;
begin
if (combobox1.text='')or
   (edit1.text='') or
   (edit2.text='')then
   begin
   showmessage('Bitte geben Sie Anrede, Vor - und Nachnamen an, um den Datensatz speichern zu können.');
   end else
   begin
if fileexists(edit1.text+' '+edit2.text+'.txt') then
begin
showmessage('Achtung! Es existiert schon ein Eintrag unter diesem Namen! Abbruch ...');
form2.visible:=false;
form1.Visible:=true;
combobox1.Text:='';
edit1.text:='';
edit2.text:='';
edit3.text:='';
edit4.text:='';
edit5.text:='';
edit6.text:='';
edit7.text:='';
edit8.text:='';
edit9.text:='';
edit10.text:='';
memo1.Text:='';
end else
begin
assignfile(datei,edit1.text+' '+edit2.text+'.txt');
rewrite(datei);
writeln(datei,combobox1.text);
writeln(datei,edit1.text);
writeln(datei,edit2.text);
writeln(datei,edit3.text);
writeln(datei,edit4.text);
writeln(datei,edit5.text);
writeln(datei,edit6.text);
writeln(datei,edit7.text);
writeln(datei,edit8.text);
writeln(datei,edit9.text);
writeln(datei,edit10.text);
writeln(datei,memo1.text);
closefile(datei);
assignfile(datei2,'Eintrage.txt');
  if not fileexists('Eintrage.txt') then
  begin
  rewrite(datei2);
  end
  else
  begin
  reset(datei2);
  end;
  closefile (datei2);

  append(datei2);
  writeln(datei2, edit1.Text + ' ' + edit2.Text);
  closefile(datei2);
end;

combobox1.Text:='';
edit1.text:='';
edit2.text:='';
edit3.text:='';
edit4.text:='';
edit5.text:='';
edit6.text:='';
edit7.text:='';
edit8.text:='';
edit9.text:='';
edit10.text:='';
memo1.Text:='';
form2.visible:=false;
form1.visible:=true;
end;
end;
- Eine Datei speichern mit den ganzen Infos aus den edit-Feldern, deren dateiname sich aus edit1.text+' '+edit2.text zusammensetzt.
- in eine datei eintrage.txt soll der dateiname rein:

wenn die datei eintrage.txt nicht existiert, soll sie erstellt werden und edit1.text+' '+edit2.text soll eingetragen werden

wenn die datei eintrage.txt existiert und leer ist, soll edit1.text+' '+edit2.text reingeschrieben werden

wenn die datei eintrage.txt existiert und schon einige dateinamen drinstehen, soll edit1.text+' '+edit2.text hinzugefügt werden.

wie mache ich das? der code funktioniert mittlerweile überhaupt nicht mehr ...
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#29

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 16:39
Mal so gefragt, welche Rechte besitzt Du auf dem Rechner und wo wird die Datei hingeschrieben. Ist die Datei irgend wo noch offen?
Welche Fehlermeldung, die selbe wie in deinem ersten Post ?

//Edit: Oha, ebend stand hier noch 'ne andere Frage
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#30

Re: Fehler bei REWRITE

  Alt 8. Okt 2005, 16:54
An meinem Rechner bin nur ich ... Es gibt nur 1 Benutzer. Die Datei ist 100%ig nicht offen vorher. Aber ich programmiere es gerade und habe es gleich geschafft. Eine Frage noch :

Bei dem Befehl append:

Ist das so richtig?

assignfile(datei4,'Eintrage.txt');
append(datei4);
writeln(datei4,edit1.Text+' '+edit2.Text);
closefile(datei4);
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 7     123 45     Letzte »    


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 16:21 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