| Autor |
Beitrag |
mhxcm
      
Beiträge: 54
|
Verfasst: Mo 18.02.08 15:15
Moin Moin EE,
hab mittlerweile es geschafft in meinem Programm verschiedene Benutzer anlegen zu können. Funzt auch alles super mit speichern, Laden anhand des Spielnamens usw... nur leider finde ich den Fehler nicht den ich bei der procedure für einen Benutzer zu löschen habe... Hintergrund Infos: Man kann höchstens 5 Benutzer anlegen, in meiner ini.Datei gibt es also 5 Sektionen (Benutzer 1 - 5) die die Eigenschaften 1.name 2.Vorname und 3. Spielname haben. Nun möchte ich anhand des spielnamens die entsprechende Sektion des Benutzers ausfindig machen und dann löschen. Beim Laden des Benutzers hab ich es so gelöst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure THauptmenue.btnladenClick(Sender: TObject); var test : string; j : integer; begin test:= InputBox('Eingabe','Bitte geben Sie Ihren Spielnamen ein: ',''); j:=1; for j:= 1 to 5 do begin ini := Tinifile.Create('C:\\Programme\stress.ini'); if test = ini.ReadString('Benutzer'+inttostr(j),'Spielname','') then begin lblname.caption := ini.ReadString('Benutzer'+inttostr(j),'Name',''); lblvorname.caption := ini.ReadString('Benutzer'+inttostr(j),'Vorname',''); lblspielname.caption := ini.ReadString('Benutzer'+inttostr(j),'Spielname',''); end; ini.Free; end; end; |
So, dass funzt tadellos, und jetzt der Quellcode fürs löschen, dass Programm läuft ich kann auch mit dem Button arbeiten, aber er löscht nichts aus der ini.Datei....:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure THauptmenue.btnbenutzerloeschenClick(Sender: TObject); var spielname : string; j : integer; begin if MessageBox(0,'Möchten Sie wirklich einen Benutzer löschen?','Vorsicht!!!',ID_OK) = ID_OK then begin spielname:= InputBox('Spielname','Bitte geben Sie Ihren Spielnamen ein: ',''); for j:= 1 to 5 do ini := TiniFile.Create('C:\\Programme\stress.ini');
begin if spielname = ini.ReadString('Benutzer'+inttostr(j),'Spielname','')then try ini.EraseSection('Benutzer'+inttostr(j)); finally ini.free; end; end; end;
end; |
Vll. fällt euch mein Fehler auf!
mfg Markus Moderiert von Christian S.: Topic aus Sonstiges (Delphi) verschoben am Mo 18.02.2008 um 15:18
_________________ 1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101")
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 18.02.08 15:32
| Zitat: | | Vll. fällt euch mein Fehler auf! |
Aber auf den ersten Blick
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure THauptmenue.btnbenutzerloeschenClick(Sender: TObject); var spielname : string; j : integer; begin if MessageBox(0,'Möchten Sie wirklich einen Benutzer löschen?','Vorsicht!!!',ID_OK) = ID_OK then begin spielname:= InputBox('Spielname','Bitte geben Sie Ihren Spielnamen ein: ',''); for j:= 1 to 5 do ini := TiniFile.Create('C:\\Programme\stress.ini');
begin if spielname = ini.ReadString('Benutzer'+inttostr(j),'Spielname','')then try ini.EraseSection('Benutzer'+inttostr(j)); finally ini.free; end; end; end; end; |
verschieb die markierte Zeile mal um eine nach oben..
Es reicht, wenn du eine Instanz erzeugst - außerdem ist dann das begin und end für die Schleife korrekt.
Edit:
Ich hab dir den Code mal sinnvoll eingerückt, dann erkennst du vllt. deinen Fehler.
Das Begin in Zeile 11 gehört NICHT mehr zur For-Schleife, weil auf diese bereits eine Anweisung folgt.
Edit2:
Noch was anderes zu deinem ersten Quellcode: Warum erzeugst du innerhalb der Schleife jedesmal eine neue Instanz von TIniFile? Create das doch einmal, und mach dann erst die Schleife, sodass du jedesmal mit der gleichen Instanz arbeitest. Außerdem fehlt hier ein try finally.
|
|
mhxcm 
      
Beiträge: 54
|
Verfasst: Mo 18.02.08 15:40
jup, hast recht, das funzt dann schonmal, er löscht den Benutzer aus der ini Datei, ABER jetzt bringt er mir direkt mein Programm zum Absturz mit der Meldung: " Eception der Klasse EAccessViolation aufgetreten. Zugriffsverletzung bei Adresse 00BF9F20. ^^ Das hat ich ja noch nie... also das EAcessViolation....
_________________ 1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101")
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 18.02.08 15:43
AccessViolation (AV) heißt normalerweise, dass du auf einen Speicherbereich (eine Variable) zugreifst, wo du nicht hindarfst.
Meine Glaskugel sagt:
Wenn du das TIniFile.Create außerhalb der Schleife hast (davor), musst du das Free natürlich auch außerhalb (danach) machen.
Edit:
Mein Vorschlag für den Quellcode
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ini := TiniFile.Create('C:\\Programme\stress.ini'); try for j:= 1 to 5 do begin if spielname = ini.ReadString('Benutzer'+inttostr(j),'Spielname','')then ini.EraseSection('Benutzer'+inttostr(j)); end; finally Ini.Free; end; |
|
|
mhxcm 
      
Beiträge: 54
|
Verfasst: Mo 18.02.08 16:00
Vielen Vielen Dank, da hab ich mal wieder viel zu viel hin und her geschrieben, und die Zuordnungen verloren. Hab zwar jetzt noch en kleines Problem beim Benutzer anlegen, aber das ist auch weil ich überall so blöd verschachtel, wo ich es nicht muss ^^.... den finde ich auch so noch....
THX for that
mfg Markus
_________________ 1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101")
|
|
|