![]() |
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:
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.
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;
Delphi-Quellcode:
Unter Windows Xp funktioniert das auch alles ganz klasse, nur unter Windows 2000 bekomme ich den Fehler "Listenindex überschreitet das Maximum (-1)".
id := Integer(ComboBox_Benutzer.Items.Objects[ComboBox_Benutzer.ItemIndex]); // Problemzeile !!!
query := PChar('SELECT passwort FROM mitarbeiter WHERE id=' + IntToStr(id)); 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 |
Re: Listenindex überschreitet das Maximum (-1) unter Win2000
:gruebel:
Warum nicht so:
Delphi-Quellcode:
id := ComboBox_Benutzer.ItemIndex;
|
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 |
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:
MfG
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; Thorsten |
Re: Listenindex überschreitet das Maximum (-1) unter Win2000
Zitat:
|
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:
Wie gesagt, unter Windows XP schmeisst er auch keinen Fehler aus, aber unter Windows 2000.
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; 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 |
Re: Listenindex überschreitet das Maximum (-1) unter Win2000
Zitat:
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 |
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 |
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 |
Re: Listenindex überschreitet das Maximum (-1) unter Win2000
Zitat:
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 10:01 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