Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listenindex überschreitet das Maximum (-1) unter Win2000 (https://www.delphipraxis.net/62747-listenindex-ueberschreitet-das-maximum-1-unter-win2000.html)

_SolidSnake_ 8. Feb 2006 22:34


Listenindex überschreitet das Maximum (-1) unter Win2000
 
Hallo zusammen :)

Ich hab ein Problem mit einer ComboBox und das nur unter Windows 2000 ... ich hab nach vielen Versuchen den Fehler auf eine Zeile einschränken können, aber komm leider nicht weiter, geschweige den Fehler beseitigt :roll:

Die ComboBox wird wie folgt gefüllt ...

Delphi-Quellcode:
for i := 0 to mysql_num_rows(_myRes)-1 do
  begin
    _myRow := mysql_fetch_row(_myRes);
    id := _myRow[0]; // Mitarbeiter-ID
    benutzer := _myRow[2] + ',' + _myRow[1]; // Nachname, Vorname
    ComboBox_Benutzer.Items.AddObject(benutzer,TOBject(StrToInt(id)));
  end;
Und an folgender Stelle soll festgestellt werden welcher Mitarbeiter in der Liste ausgewählt wurde und die ID für eine SQL-Abfrage genutzt werden.

Delphi-Quellcode:
id := Integer(ComboBox_Benutzer.Items.Objects[ComboBox_Benutzer.ItemIndex]); // Problemzeile !!!
query := PChar('SELECT passwort FROM mitarbeiter WHERE id=' + IntToStr(id));
Unter Windows Xp funktioniert das auch alles ganz klasse, nur unter Windows 2000 bekomme ich den Fehler "Listenindex überschreitet das Maximum (-1)".

Ersetze ich diese Zeile und setze id := 1 dann kann ich mich zum Beispiel mit dem Passwort des ersten Mitarbeiters ohne Probleme einloggen. Es muss also irgendwie in dieser Zeile stecken.

Wenn jemand schonmal ein ähnliches Problem hatte oder einen Rat weiss, wäre ich dankbar.

Gruß
Micha

turboPASCAL 8. Feb 2006 22:39

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
:gruebel:

Warum nicht so:

Delphi-Quellcode:
id := ComboBox_Benutzer.ItemIndex;

_SolidSnake_ 8. Feb 2006 22:41

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
Weil ich die ID des Mitarbeiters benötige und nicht die vom Index. Der Index fängt bei 0 an und geht durch, die Mitarbeiter ID fängt bei 1 an und muss nicht durchgehend sein (kann ja auch nen Mitarbeiter löschen oder sperren).

Gruß
Micha

omata 8. Feb 2006 22:52

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
Hallo _SolidSnake_,

programmiere sicher.
Das bedeutet in diesem Fall, greife nicht einfach auf ComboBox_Benutzer.ItemIndex zu und übergebe diesen Wert an Object[] sondern prüfe vorher, ob der Wert überhaupt gültig ist.

Also...
Delphi-Quellcode:
if ComboBox_Benutzer.ItemIndex >= 0 then begin
  id := Integer(ComboBox_Benutzer.Items.Objects[ComboBox_Benutzer.ItemIndex]);
  query := PChar('SELECT passwort FROM mitarbeiter WHERE id=' + IntToStr(id));
end;
MfG
Thorsten

turboPASCAL 8. Feb 2006 23:06

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
Zitat:

Weil ich die ID des Mitarbeiters benötige und nicht die vom
Das meinte ich zum Debuggen, sorry. Manchmal schreib ich zu wenig... ;)

_SolidSnake_ 8. Feb 2006 23:10

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
Hallo Thorsten.

Danke für den Tipp :) Ich hab allerdings schon eine ähnliche Abfrage eingebaut, nur nicht mit angezeigt, weil es eben an dieser einen Zeile liegen muss. Die komplette Prozedur sieht so aus:

Delphi-Quellcode:
procedure TfrmLogin.Button_LoginClick(Sender: TObject);
var
  query: PChar;
  id: Integer;
  passwort: String;
begin
  if Trim(ComboBox_Benutzer.Text) <> '' then
    begin
      if Trim(Edit_Passwort.Text) = '' then
        begin
          MessageDlg('Bitte gültiges Passwort eingeben.', mtInformation, [mbOK], 0);
          ModalResult := mrNone;
        end
      else
        begin
          id := Integer(ComboBox_Benutzer.Items.Objects[ComboBox_Benutzer.ItemIndex]);
          query := PChar('SELECT passwort FROM mitarbeiter WHERE id=' + IntToStr(id));
          mysql_real_query(_myCon, query, Length(query));

          _myRes := mysql_store_result(_myCon);
          if _myRes = nil then
            begin
              ShowMessage('Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(_myCon));
              Exit;
            end;

          _myRow := mysql_fetch_row(_myRes);
          passwort := _myRow[0];

          if Edit_Passwort.Text = passwort then
            LoginOK := True
          else
            begin
              MessageDlg('Falsches Passwort.', mtInformation, [mbOK], 0);
              ModalResult := mrNone;
            end
        end
      end
  else
    begin
      MessageDlg('Bitte einen Benutzer auswählen.', mtInformation, [mbOK], 0);
      ModalResult := mrNone;
    end;
end;
Wie gesagt, unter Windows XP schmeisst er auch keinen Fehler aus, aber unter Windows 2000.
Die ComboBox wird auch ordentlich angezeigt, nur sobald man dann auf "Login" klickt, kommt die Fehlermeldung.

Zur Not werd ich wohl versuchen irgendwas über den ComboBox_Benutzer.ItemIndex oder den ComboBox_Benutzer.Text zu basteln :gruebel:

Gruß
Micha

_SolidSnake_ 8. Feb 2006 23:13

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
Zitat:

Zitat von turboPASCAL
Zitat:

Weil ich die ID des Mitarbeiters benötige und nicht die vom
Das meinte ich zum Debuggen, sorry. Manchmal schreib ich zu wenig... ;)

Nun kann ich nicht ganz folgen, sorry :oops:

Solange arbeite ich noch nicht mit Delphi und arbeite momentan nach dem Prinzip "learning by doing" und eben über google, foren und co.

Gruß
Micha

omata 8. Feb 2006 23:15

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
Du brauchst nicht auf irgendwelche komischen Tricks zurückgreifen. Wenn du den Style der Combobox verändert hast (auf csDropDownList), dann darfst du nicht mehr auf .Text zugreifen (das geht nicht) nimm doch einfach den Test ItemIndex >= 0 dann hast du kein Probleme.

Verwunderte Grüsse
Thorsten

_SolidSnake_ 8. Feb 2006 23:25

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
Ich hab das nun so eingebaut, aber dann bekomm ich unter Windows 2000 den fehler das ich einen Benutzer auswählen soll, obwohl ich einen ausgewählt habe. Unter Windows XP läuft alles nach wie vor ganz prima.

Gruß
Micha

turboPASCAL 8. Feb 2006 23:26

Re: Listenindex überschreitet das Maximum (-1) unter Win2000
 
Zitat:

Solange arbeite ich noch nicht mit Delphi und arbeite ...
Ist doch kein Problem.

Omata hat ja schon den richtigen Hinweis gegeben. Damit kannst du sicher stellen das überhaupt ein Eintrag in der Listbox existiert. Ich würde mich auch nicht auf das Vordefinieren den Listboxeintrages im OI verlassen. Beim "adden" kann es passieren, das diese Voreinstellung auf -1 zurückgesetzt wird.


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

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