Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler bei REWRITE (https://www.delphipraxis.net/54630-fehler-bei-rewrite.html)

Chrissi91 8. Okt 2005 17:41

Re: Fehler bei REWRITE
 
Da ich das jetzt nur teste, reicht es ... Als näcstes programmiere ich ja, dass der nutzer den pfad unter optionen angeben kann ... also, der code is dann richtig ... schön ... thx

Chrissi91 8. Okt 2005 17:50

Re: Fehler bei REWRITE
 
Ich habe Windows unter C! Und ich habe den Code, wie im letzten Beitrag aufgeführt in meinem Programm ... Trotzdem kann er die Datei nicht finden:

Wenn die Datei leer ist
Wenn in der Datei schon Einträge drin sind ...

Den Code poste ich lieber nicht noch mal, sonst werde ich bald noch gesperrt ;)

Daniel 8. Okt 2005 18:07

Re: Fehler bei REWRITE
 
Was in solchen Fällen manchmal hilft, die Orientierung zurück zu gewinnen: Baue Dir erst aus den Editfeldern den Dateinamen zusammen und speichere ihn in einem String. Diesen String kannst Du dann mal begutachten und vermutlich den Fehler entdecken:

Delphi-Quellcode:
if fileexists('C:\WINDOWS\Desktop\'+edit1.text+' '+edit2.text+'.txt') then
würde dann beispielsweise zu:

Delphi-Quellcode:
filename:= 'C:\WINDOWS\Desktop\'+edit1.text+' '+edit2.text+'.txt';
ShowMessage( filename );
if fileexists( filename ) then
Nur als Anregung... ;-)

Chrissi91 8. Okt 2005 18:39

Re: Fehler bei REWRITE
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TForm2.BitBtn1Click(Sender: TObject);
var
datei, datei2, datei3, datei4, datei5, datei6: textfile;
hilf, pfad: string;
begin
if fileexists (ExtractFilePath(ParamStr(0))+'einstellungen.ini') then
begin
assignfile(datei6,ExtractFilePath(ParamStr(0))+'einstellungen.ini');
reset(datei6);
readln(datei6,pfad);
closefile(datei6);
end;
 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(pfad+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,pfad+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);
        end;
       if fileexists(pfad+'Eintrage.txt') then
        begin
         assignfile(datei2,pfad+'Eintrage.txt');
         reset(datei2);
         readln(datei2,hilf);
         closefile(datei2);
          if hilf = '' then
           begin
            deletefile(pfad+'Eintrage.txt');
            assignfile(datei3,pfad+'Eintrage.txt');
            rewrite(datei3);
            writeln(datei3,edit1.Text+' '+edit2.Text);
            closefile(datei);
           end else
           begin
            assignfile(datei4,pfad+'Eintrage.txt');
            append(datei4);
            writeln(datei4,edit1.Text+' '+edit2.Text);
            closefile(datei4);
           end;
        end else
        begin
         assignfile(datei5,pfad+'Eintrage.txt');
         rewrite(datei5);
         writeln(datei5,edit1.Text+' '+edit2.Text);
         closefile(datei5);
        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;
1. Wenn Eintrage.txt nicht existiert, wird sie ganz korrekt erstellt. So weit, so gut ...
2. Wenn aber die Datei schon angelegt ist und einige Einträge drin sind, kann er die Datei nicht finden.
3. Wenn aber die Datei schon angelegt ist und noch keine Einträge drin sind, kann er die Datei nicht finden.

Bei 2. und 3. steht dort "I/0 Error 32". (oder so ähnlich)

Was habe ich denn jetzt schon wieder falsch gemacht ...

In der Datei einstellungen.ini steht: C:\WINDOWS\DESKTOP\VERSION 3\

Trotzdem noch mal im Anhang ... ;)

Sharky 8. Okt 2005 19:40

Re: Fehler bei REWRITE
 
Zitat:

Zitat von Daniel
... und für den Code dazu die Suche der DP. ;-)
Irgendwas mit "Special", "Folder" und "Location", wenn ich nicht irre.

Wenn für den Desktop-Ordner der Code nicht vorhanden ist
Delphi-Quellcode:
uses
  ShlObj;

function GetShellFolder(CSIDL: integer): String;
var
  pidl        : PItemIdList;
  FolderPath  : string;
  SystemFolder : Integer;
begin
  SystemFolder := CSIDL;
  if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then
  begin
    SetLength(FolderPath, max_path);
    if SHGetPathFromIDList(pidl, PChar(FolderPath)) then
    begin
      SetLength(FolderPath, strlen(PChar(FolderPath)));
    end;
  end;
  Result := FolderPath;
end;
Als CSIDL einfach CSIDL_DESKTOPDIRECTORY.

Aber das ist hier nicht das entscheidende Thema.

Als erstes solltest Du dir noch einmal Gedanken darüber machen wie Du die Adressdaten speichern möchtest. Wenn ich das richtig sehe versuchst Du für jeden Adresseintrag einen Datei zu erzeugen welche diese Namen hat: "Name Vorname.Txt".
In deiner "Index-Datei" speicherst Du dan alle Dateinamen welche Du erzeugt hast?
Was machst Du denn wenn zwei Menschen den selben Vor- und Nachnamen haben? Ja, das soll es geben ;-)

Auch wenn es sich jetzt hart anhört (ist aber nicht so gemeint) ->

Überlege Dir erst eine vernünftige Art die Daten zu speichern. Ich weiss; Du hast dir sicher Überlegt wie man es am einfachsten machen kann und bist auf diese Lösung gestossen. Aber 99% deiner Aufgabe als "Programmierer" besteht darin dir ein Konzept zu überlegen. Dies ist die wichtigste Arbeit. Das ganze dann in eine beliebige Sprache zu qutschen kann jeder der tippen kann ;-)

P.S.: Und Du solltest die Antworten hier im Forum genauer lesen. Auf die Problematik "Dateiname ohne Pfadangabe" habe ich schon um 17 Uhr ausführlich hingewiesen.

Wenn Du die Ratschläge die Du bekommst nämlich nicht annimmst kann es dir passieren das irgendwann keiner mehr Lust hat dir etwas zu erklären. :stupid: ;-)

Chrissi91 8. Okt 2005 19:54

Re: Fehler bei REWRITE
 
Die Ratschläge habe ich auch angenommen, ausprobiert und die Fehlermeldung kommt trotzdem ... Nun hast du mir freundlicherweise wieder einen Code gepostet, mit dem ich aber leider nichts anfangen kann ... Nichts gegen dich oder andere, aber was bringt es mir, wenn mir jemand einen Code gibt und ich diesen durch meinen ersetzen soll? Daraus lerne ich ja nichts. ;)
Sicherlich habe ich auch über ein besseres Konzept nachgedacht, nämlich alles in eine Datei zu speichern. Aber da kam ich auf mehr Probleme ;)

Ich verstehe noch nicht ganz, wo der Fehler in meinem geposteten Code liegt :(

Daniel G 8. Okt 2005 19:56

Re: Fehler bei REWRITE
 
Zitat:

Zitat von Chrissi91
Ich verstehe noch nicht ganz, wo der Fehler in meinem geposteten Code liegt :(

Dann zeig' uns doch mal das komplette Projekt.

Chrissi91 8. Okt 2005 19:58

Re: Fehler bei REWRITE
 
DA wird dir aber schlecht ;) Im Anhang oder als Delphi-Code? Der Anhang ist größer als 3 MB :(

Daniel G 8. Okt 2005 20:01

Re: Fehler bei REWRITE
 
Zitat:

Zitat von Chrissi91
DA wird dir aber schlecht ;) Im Anhang oder als Delphi-Code? Der Anhang ist größer als 3 MB :(

Öh... Du hast nicht zufällig einen Server, auf den du den packen könntest? Und sei es nur der freie Speicherplatz bei deinem ISP...

Chrissi91 8. Okt 2005 20:14

Re: Fehler bei REWRITE
 
Nein, aber schalte mal dein ICQ ein, bzw. guck mal rein ... ;)

Sharky 8. Okt 2005 20:44

Re: Fehler bei REWRITE
 
Zitat:

Zitat von Chrissi91
... Der Anhang ist größer als 3 MB :(

:?: Was ist denn da alles drinn? Nur die *.pas, *.dfm, *.dpr, *.res sollten reichen ;-)
Das ganze packen und hier anhängen.

Daniel G 8. Okt 2005 21:15

Re: Fehler bei REWRITE
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von Chrissi91
... Der Anhang ist größer als 3 MB :(

:?: Was ist denn da alles drinn? Nur die *.pas, *.dfm, *.dpr, *.res sollten reichen ;-)
Das ganze packen und hier anhängen.

Chrissi hat's mir per ICQ geschickt... Es waren die *.~dfm, die so riesig waren. Laut Chrissi waren da vorher mal Bilder drinne. Ungefähr 5*~2MB.
Das lässt das (Modem-) Herz höher schlagen

Download (60kb)

Ihr benötigt:

Indy
TQProgressBar

//Edit: Chrissi ist übrigens der Erste, der mich für den DP - Admin gehalten hat. YEEHAAAW! Bald übernehme ich den ganzen Laden!

Chrissi91 8. Okt 2005 21:17

Re: Fehler bei REWRITE
 
Danke Daniel!

Chrissi91 8. Okt 2005 21:31

Re: Fehler bei REWRITE
 
Folgendes funktioniert noch nicht:

- Speichern (Form 2; Prozedur auf einem Bitbtn mit der Caption "Speichern")
- Löschen (Form 4; Prozedure auf dem Bitbtn mit der Caption "Löschen") <-- Bekomme ich hoffentlich alleine hin, aber wenn ihr es schon wisst, was da falsch ist und ihr mir keinen neuen Code geben wollt, sondern nur den veränderten, könnt ihr es schon sagen ;)
- Updaten (Da muss ich noch herausfinden, wie man etwas aus dem Internet downloaden kann mit idhttp)
- noch ein paar Fehler :-D

//Edit Ups ... Doppelpost :)

Chrissi91 9. Okt 2005 08:02

Re: Fehler bei REWRITE
 
Also ...

ich habe noch Mal angefangen und will es nun so machen, dass alles in einer Datei gespeichert wird ...
Als ich mir das alte Projekt angeschaut habe, merkte ich, dass alles durcheinander war. Das einzige, was mir nict in den Kopf will, ist, warum das Speichern auf Form 2 nicht klappt (Bitbtn mit der Caption "Speichern"). Wäre schön, wenn ir mich auf den Fehler aufmersam machen würdet, falls ihr ihn seht
Mit ExtractFilePath(ParamStr(0)) speicher ic jetzt die Datei Einstellungen neben der EXE-Datei, aber wie kann ich prüfen, ob ein vom Benutzer angegebenes Verzeichnis existiert? Bitte keinen langen Codes ... ;) Ich hoffe dafür gibt es einen Befehl, wie if fileexists.

Danke ... ;)

Sharky 9. Okt 2005 08:19

Re: Fehler bei REWRITE
 
Zitat:

Zitat von Chrissi91
... Bitte keinen langen Codes ... ;) Ich hoffe dafür gibt es einen Befehl, wie if fileexists.

Wenn Du wissen möchtes ob ein File existiert verwendest Du FileExists.
Jetzt möchtest Du wissen ob ein Directory existiert ;-)
Da Du ja keinen langen Code möchtest sage ich jetzt nicht genau wie die Funktion heissen könnte. Okay? :stupid:

Chrissi91 9. Okt 2005 08:28

Re: Fehler bei REWRITE
 
vll.:

if directoryexists? ;)

Chrissi91 9. Okt 2005 12:12

Re: Fehler bei REWRITE
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt geht es wieder ums Speichern ;)

Auf Form 2 existiert ein BitBtn mit der Caption Speichern. Nach dem Programmstart muss erst unter Optionen ein Speicherpfad angegeben werden. Wenn ihr nach dem Eintragen der ersten Datei, mal in Daten.ini schaut, werdet ihr feststellen, dass die Daten am Ende unvollständig sind. Anstatt http://www.meinesite.de.vu steht bei nur http://www.m

Bei der Email auch ... Ich habe auch Breakpoints gesetzt, einzelne werte ausgeben lassen, um sie zwischendurch zu kontrollieren, aber ich bin damit nicht weiter gekommen. Dieses Mal passen die Dateien auch in den Anhang ;)

marabu 9. Okt 2005 12:21

Re: Fehler bei REWRITE
 
Hallo Christopher,

hast du darauf geachtet, dass deine Datei auch garantiert geschlossen wird, bevor das Programm sich beendet? Ohne CloseFile() an der richtigen Stelle werden nur Vielfache von 128 Byte auf die Platte geschrieben. Wie groß ist denn deine Ausgabedatei in Byte?

Grüße vom marabu

Chrissi91 9. Okt 2005 12:29

Re: Fehler bei REWRITE
 
Ups ... :wall: Den Fehler mache ich seirt 2 Jahren ...

:coder2: DAnke!

Chrissi91 9. Okt 2005 14:03

Re: Fehler bei REWRITE
 
Ist es möglich eine selbst definierte Procedure von Unit2 auch in Unit1 aufzurufen?

Um eine aufzurufen, benutze ich

Name_der_Prozedur;

Suche (DP und Delphihilfe) habe ich schon benutzt ;), aber nichts gefunden.

Ausprobiert habe ich auch schon :D

form2.Name_der_Prozedur;

unit2.Name_der_Prozedur;

Jemand eine Idee? :idea:

marabu 9. Okt 2005 16:18

Re: Fehler bei REWRITE
 
Hallo Christopher,

wenn du so vorgehst, dann sollte es keine Probleme geben:

Delphi-Quellcode:
unit Unit2;

interface

  procedure DeineProcAusUnit2();

implementation

procedure DeineProcAusUnit2();
begin
  // ...
end;

end.
Durch die Aufnahme des Prozedur-Kopfes in den interface Abschnitt von Unit2 wird deine Prozedur nach außen sichtbar gemacht.

Delphi-Quellcode:
unit Unit1;

interface

implementation

uses
  Unit2;

begin
  DeineProcAusUnit2();
end.
Und durch die Uses-Klausel im implementation Abschnitt von Unit1 kannst du jetzt deine Prozedur aufrufen, als wäre sie Bestandteil von Unit1. Die qualifizierte Schreibweise Unit2.DeineProcAusUnit2() musst du nur dann verwenden, wenn eine Prozedur gleichen Namens auch noch in einer anderen von dir importierten Unit existieren würde.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.
Seite 2 von 2     12   

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