Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Angemeldeten Usernamen nicht löschen ... (https://www.delphipraxis.net/88053-angemeldeten-usernamen-nicht-loeschen.html)

LOMBI 9. Mär 2007 12:41


Angemeldeten Usernamen nicht löschen ...
 
Hallo,

ich möchte verhindern, dass ein gerade angemeldeter User aus einer ListBox gelöscht wird.
Bei dem folgenden Code erhalte ich eine Zugriffsverletzung. Was mache ich falsch?

Delphi-Quellcode:
procedure TFormDemo.DeleteActionExecute(Sender: TObject);
var
   ini: TIniFile;
   msg: string;
   CurrentUser, status: String;
begin
  CurrentUser := LEditUser.Text;
  Status := 'Aktiv';
  with ListBoxUser do
    begin
      ini := TiniFile.Create(ExtractFilePath(Application.ExeName) + 'Demo.ini');
      msg := Format(S_SAFETYFIRST, [Items[ItemIndex]]);
      CurrentUser := ini.ReadString('LetztesLogin', CurrentUser, '');
      status := 'Aktiv';
      if (CurrentUser = status) then
        ModalResult := mrOK;
        if ModalResult = mrOK then
          ShowMessage('Ein angemeldeter Benutzername kann nicht gelöscht werden!')
          else
        if MessageDlg(msg, mtConfirmation, [mbYes, mbNo], 0) = mrYes then
        begin
          ini.DeleteKey(S_USERSECTION, Items[ItemIndex]);
          ini.DeleteKey(S_LASTLOGINSECTION, Items[ItemIndex]);
          Items.Delete(ItemIndex);
  end;
Gruß
Lombi

mkinzler 9. Mär 2007 13:29

Re: Angemeldeten Usernamen nicht löschen ...
 
Wo kommt der Fehler genau?
Achtung beim setzen von ModalResult wird ein (modales) Fenster geschlossen.

LOMBI 9. Mär 2007 13:33

Re: Angemeldeten Usernamen nicht löschen ...
 
Fehlermeldung:

Delphi-Quellcode:
CurrentUser := ini.ReadString('LetztesLogin', CurrentUser, '');

hoika 9. Mär 2007 13:41

Re: Angemeldeten Usernamen nicht löschen ...
 
Hallo,

das ist die Stelle ?
sieht aber unverdächtig aus, abgesehen vom Format darüber.
Hast du das mal debuggt ?



Mach mal deinen Code etwas schöner.
Das with Listbox ist hier nicht so schön.

Du lädst Items[ItemIndex] mehrfach.
Nimm eine lokale Variable dafür.
Das lässt sich dann besser Debuggen.
msg setzt du zu früh.

Das Status:= Aktiv wird zweimal gesetzt

Der Code prüft nicht, ob ItemIndex-1 (kein Eintrag in der Listbox markiert) ist.



Heiko

LOMBI 9. Mär 2007 16:50

Re: Angemeldeten Usernamen nicht löschen ...
 
Hab das jetzt mal so geändert und probeweise die Zeile entfernt:

Zitat:

CurrentUser := ini.ReadString('LetztesLogin', CurrentUser, '');
Nun können zwar alle User aus der ListBox und den beiden inis gelöscht werden,
aber ohne Prüfung eines aktiven Benutzers.

hoika 9. Mär 2007 17:04

Re: Angemeldeten Usernamen nicht löschen ...
 
Hallo,

CurrentUser := LEditUser.Text;


steht denn im Editor was drin ?
Vielleicht stürzt die ReadString ja bei Leerstring ab ?


Heiko

IngoD7 9. Mär 2007 17:08

Re: Angemeldeten Usernamen nicht löschen ...
 
Zitat:

Zitat von LOMBI
Delphi-Quellcode:
CurrentUser := ini.ReadString('LetztesLogin', CurrentUser, '');

Du hast dich vergaloppiert!

Du willst für CurrentUser etwas aus der Ini lesen.
Du benutzt aber CurrentUser direkt selbst, um den Key in der Ini-Section 'LetztesLogin' anzugeben.

Wenn CurrentUser zu dem Zeitpunt '' ist, dann suchst du also den Key '' in der Section 'LetztesLogin'.
(Wenn CurrentUser einen Namen enthält, wird als Key der Name gesucht. Wenn CurrentUser - wie später abgeprüft wird - 'Aktiv' enthält wird der Key 'Aktiv' gesucht.)
Wird schwierig ... ;)

Du benutzt einfach die Variable CurrentUser in zuvielen (und logisch falschen) Zusammenhängen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 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