![]() |
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
|
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 ;) |
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:
würde dann beispielsweise zu:
if fileexists('C:\WINDOWS\Desktop\'+edit1.text+' '+edit2.text+'.txt') then
Delphi-Quellcode:
Nur als Anregung... ;-)
filename:= 'C:\WINDOWS\Desktop\'+edit1.text+' '+edit2.text+'.txt';
ShowMessage( filename ); if fileexists( filename ) then |
Re: Fehler bei REWRITE
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
1. Wenn Eintrage.txt nicht existiert, wird sie ganz korrekt erstellt. So weit, so gut ...
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; 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 ... ;) |
Re: Fehler bei REWRITE
Zitat:
Delphi-Quellcode:
Als CSIDL einfach CSIDL_DESKTOPDIRECTORY.
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; 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: ;-) |
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 :( |
Re: Fehler bei REWRITE
Zitat:
|
Re: Fehler bei REWRITE
DA wird dir aber schlecht ;) Im Anhang oder als Delphi-Code? Der Anhang ist größer als 3 MB :(
|
Re: Fehler bei REWRITE
Zitat:
|
Re: Fehler bei REWRITE
Nein, aber schalte mal dein ICQ ein, bzw. guck mal rein ... ;)
|
Re: Fehler bei REWRITE
Zitat:
Das ganze packen und hier anhängen. |
Re: Fehler bei REWRITE
Zitat:
Das lässt das (Modem-) Herz höher schlagen ![]() 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! |
Re: Fehler bei REWRITE
Danke Daniel!
|
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 :) |
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 ... ;) |
Re: Fehler bei REWRITE
Zitat:
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: |
Re: Fehler bei REWRITE
vll.:
if directoryexists? ;) |
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 ![]() ![]() 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 ;) |
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 |
Re: Fehler bei REWRITE
Ups ... :wall: Den Fehler mache ich seirt 2 Jahren ...
:coder2: DAnke! |
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: |
Re: Fehler bei REWRITE
Hallo Christopher,
wenn du so vorgehst, dann sollte es keine Probleme geben:
Delphi-Quellcode:
Durch die Aufnahme des Prozedur-Kopfes in den interface Abschnitt von Unit2 wird deine Prozedur nach außen sichtbar gemacht.
unit Unit2;
interface procedure DeineProcAusUnit2(); implementation procedure DeineProcAusUnit2(); begin // ... end; end.
Delphi-Quellcode:
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.
unit Unit1;
interface implementation uses Unit2; begin DeineProcAusUnit2(); end. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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