Autor |
Beitrag |
audioexe
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 25.03.10 19:42
Guten Abend liebe Leute,
ich habe ein mittelschweres Problem andem ich so langsam verzweifele.
Kurze Erklärung.
Ich habe ein Programm geschrieben, dass über eine exterene Datei den Benutzer wie auch das Passwort läd beim "oncreate".Durch "rewrite" kann der Benutzer nach erfolgreicher Eingabe des Passworts,des aktuellen Benutzernamens und des neuen Benutzernamens auf die Benutzerdaten-Datei "bn.cb" den neuen Benutzernamen "einschreiben"
Nun haut mir Delphi den AE-Fehler 32 um die Ohren, obwohl die Datei "bn.cb" vorher durch "closefile" dicht gemacht wurde.
Wäre toll wenn ihr mir vielleicht sagen könntet wo der Fehler ist und eine Hilfestellung gebt, wie ich das ganze beseitigen kann.
Hier nochmal der QC fürs "Ändern"
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69:
| procedure TForm5.Button1Click(Sender: TObject); begin if Edit1.Text = BN1 then if Edit2.Text = PW1 then if Edit3.Text = Edit4.Text then begin
assignFile(InFile2, 'c:\bn.cb'); rewrite(InFile2); writeln(InFile2, Edit3.Text); writeln(InFile2, BN2); writeln(InFile2, BN3); CloseFile (InFile2); Showmessage('Benutzer geändert! Starten Sie das Programme erneut!'); form1.close; form2.close; form3.close; form4.Close; end else Showmessage('Die Benutzer stimmen nicht überein') else Showmessage('Das Passwort ist nicht korrekt') else if Edit1.Text = BN2 then if Edit2.Text = PW2 then if Edit3.Text = Edit4.Text then begin assignFile(Infile2, 'c:\bn.cb'); rewrite(Infile2); writeln(InFile2, BN1); writeln(InFile2, Edit3.Text); writeln(InFile2, BN3); CloseFile (InFile2); Showmessage('Benutzer geändert! Starten Sie das Programme erneut!'); form1.close; form2.close; form3.close; form4.Close; end else Showmessage('Die Benutzer stimmen nicht überein') else Showmessage('Das Passwort ist nicht korrekt') else if Edit1.Text = BN3 then if Edit2.Text = PW3 then if Edit3.Text = Edit4.Text then begin assignFile(Infile2, 'c:\bn.cb'); rewrite(Infile2); writeln(InFile2, BN1); writeln(InFile2, BN2); writeln(InFile2, Edit3.Text); CloseFile (InFile2); Showmessage('Passwort geändert! Starten Sie das Programme erneut!'); form1.close; form2.close; form3.close; form4.Close; end else Showmessage('Die Benutzer stimmen nicht überein') else Showmessage('Das Passwort ist nicht korrekt') else Showmessage('Benutzer unbekannt!');
end; |
und hier fürs "Formcreate"
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm5.FormCreate(Sender: TObject); begin assignFile(Infile, 'c:\pw.cb'); assignFile(Infile2, 'c:\bn.cb'); reset(InFile); reset(InFile2); while not eof (InFile) do begin readln(InFile, PW1); readln(InFile, PW2); readln(InFile, PW3); end; while not eof (InFile2) do begin readln(InFile2, BN1); readln(InFile2, BN2); readln(InFile2, BN3); end; CloseFile (InFile); CloseFile (InFile2);
end; |
mfg
audi
edit: habe glo. var ersetzt
edit2: relative pfade wurden ersetzt
Moderiert von Narses: Quote- durch Delphi-Tags ersetzt
Zuletzt bearbeitet von audioexe am Fr 26.03.10 09:18, insgesamt 1-mal bearbeitet
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 25.03.10 19:56
Bzgl. der Fehlermeldung:
Melancholy of Haruhi-chan Suzumiya
Und zu deinem Source:
- Programm beenden mit Application.Terminate;
- Globale Variablen sind bäh!
- Hat dein Nutzer die Berechtigungen für den Zugriff auf die Datei? Schreibschutz?
- Schau Dir mal das Thema Resourcenschutzblöcke (Try...finally\try...Except) an.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Do 25.03.10 19:59
hi,
Bitte verwende kein [Zitat] für Quellcode! dafür gibts [delphi]deinquellcode[/delphi] tags.
Hast Du schon mal versucht Deinen Quellcode zu Debuggen! Also Haltepunkt setzen und dann Step by Step die Zeilen abzuarbeiten um den oder die Fehler zu Finden?
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
audioexe 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 25.03.10 20:06
so wollte nich antworten bevor ich mir sicher bin, den Inhalt des Posts von BenDe vollständig (nicht) verstanden zu haben^^
erstmal, danke für die Umstellung von [Zitat] auf [Delphi].
Werde das beim nächsten Post von mir beachten.
Nun BTT
Ich bin noch nicht so lange im Bereich Delphi unterwegs, was ihr auch sicherlich durch meinen Quellcode erkennen könnt.
Bedeutet, dass es mir etwas schwer fällt durch das Try..Finally Gewühl durchzusteigen.
Ich benutze Globale Var. da ich das mal iwann von meinem Lehrer vor ein paar Jahren in der Schule mitbekommen habe und würde auch gerne bei dieser Variante bleiben wenn das iwie möglich ist.
Der Benutzer hat die Rechte für den Zugriff.
Das ganze Programm gibts auch noch fürs PW ändern und da klappts einwandfrei nur hier nicht.
Der schmeißt mir den Fehler bei "rewrite(Infile2)" raus.
edit:
(bei allen 3 "rewrite(Infile2)" in den if schleifen)
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Do 25.03.10 20:24
Ich würde erst mal Prüfen ob die Datei überhaupt da ist bevor ich rewrite aufrufe!
z.B. Delphi-Quelltext 1: 2:
| assignFile(InFile2, 'bn.cb'); if not(FileExists('bn.cb')) then ReWrite(InFile2); |
Aber dazu hat BenBE ja schon was gesagt!
audioexe Zitat: | Ich benutze Globale Var. ...... würde auch gerne bei dieser Variante bleiben |
Empfehlung auch von mir: Ganz schnell Umdenken!
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
audioexe 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 25.03.10 20:39
umdenken, gerne^^
was wären denn die Alternativen zu Globalen Variablen?
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Do 25.03.10 20:48
z.B. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm5.Button1Click(Sender: TObject); var InFile2 = TextFile;
begin assignFile(InFile2, 'bn.cb'); end; |
Der Rest ist ein Lernprozess, Tutorials lesen, Delphi Hilfe usw.
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
audioexe 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 25.03.10 20:55
achso meintest du das, die VAR direkt in der Procedure deklarieren. Ja des is kein Thema.
aber meine Frage bleibt leider noch bestehen. Warum haut der mir da diesen Fehler raus?
Kurzes Update. Habe gelesen das man keine relativen Pfade angeben soll. Hab ich geändert, Fehler bleibt bestehen.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 25.03.10 21:00
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Do 25.03.10 21:00
_________________ Salus populi suprema lex esto
Zuletzt bearbeitet von delphi10 am Do 25.03.10 21:05, insgesamt 1-mal bearbeitet
|
|
audioexe 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 25.03.10 21:03
@delphi10
ja das dachte ich mir auch, dass unter Umständen da noch iwo ein "closefile" zu wenig ist.
Aber ich hab den Code wirklich ziemlich genau durchgeschaut und ich finde da nichts, was da noch stören könnte.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Do 25.03.10 21:51
delphi10 oops, da hab ich doch echt an Zeilen bearbeitung gedacht und nicht daran das er ständig eine neue Datei erstellt für sowas.
audioexe CrossPosts werden in Foren nicht gern gesehen!!
Da wir hier aber den gleichen QuellCode sehn wie in DT, dürftest Du wahrscheinlich doch nicht so genau lesen was andere schreiben, oder versuchen es umzusetzen! mh...
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 26.03.10 00:34
audioexe hat folgendes geschrieben : | so wollte nich antworten bevor ich mir sicher bin, den Inhalt des Posts von BenDe vollständig (nicht) verstanden zu haben^^ |
Naja, vor dem Verstehen käme zuerst das Lesen - was Du scheinbar auch nicht tust, wie man wunderbar an meinem "Nick" in deinem Post sieht. Vergleich mal mit dem, was links neben diesem Post steht
Aber sei unbesorgt: Obwohl ich deinen Satz ausgiebig gelesen habe, versteh ich nicht, was Du damit ausdrücken möchtest.
Zu den Alternativen zu globalen Variablen:
- Lokale Variablen wie bereits gezeigt
- Felder\Properties im Formular-Objekt
Und SOOOO Schwierig ist Try\Finally bzw. Try\Except auch nicht zu verstehen, wenn man sich einmal die Hilfe bzw. diverse Tutorials durchliest.
@ALF: Crossposts gehen schon in Ordnung, solange sie angegeben werden (und zwar direkt im Einleitungspost). Sollte man aber vermeiden, wenn es keinen triftigen Grund für gibt.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|