Problem mit neuem Datenbank-Eintrag über Combo-Box



  • Hi,

    wir machen gerade ein Übungsprojekt zum Erlernen von Datenbank-Anbindung an Formulare. Dabei sollen wir ein Fahrtenbuch-Formular mit SQL-Datenbank machen.
    Ich bin auch schon fast fertig, habe nur noch ein übles Problem mit dem Hinzufügen neuer Stadtnamen.
    Der Benutzer kann aus einer Combo-Box einen vorhandenen Stadt-Eintrag wählen oder einen neuen Stadtnamen eingeben.
    Der neue Stadtnamen-Eintrag wird auch schon in die SQL-Tabelle geschrieben, aber wenn ich den Datensatz abspeichere, bekomme ich einen Index-Fehler (Index was outside the bounds of the array).

    Beim Speichern eines Datensatzes wird nicht der Stadtname gespeichert, sondern nur der Index der Neben-Tabelle mit den Stadtnamen (also zwei Spalten, "OrtNr" und "OrtName").
    "StadtNummern" ist eine temporäre Hilfs-Tabelle, in der beim Programm-Start die Index-Nummern der Städte gehalten werden. Dabei werden dann auch die Combo-Boxen mit Stadtnamen aus der Datenbank gefüllt.

    Hier nun das problematische Stück Code das dann ausgeführt wird, wenn der Benutzer einen neuen Stadtnamen in die Combo-Box eingibt:

    int[] StadtNummern = new int[100];
    
    cbStartOrt.Items.Clear();
    cbZielOrt.Items.Clear();
    command.CommandText = "SELECT OrtNr, OrtName FROM Orte;";
    OdbcDataReader datenleser = null;
    datenleser = command.ExecuteReader();
    int I = 0;
    while (datenleser.Read())
    {
       cbStartOrt.Items.Add(datenleser.GetString(1));
       cbZielOrt.Items.Add(datenleser.GetString(1));
       StadtNummern[I++] = datenleser.GetInt32(0);
    }
    datenleser.Close();
    

    Wie gesagt, wenn ich einen Datensatz schreibe mit Städten die schon drin waren in der Datenbank, dann funktioniert alles. Hat jemand eine Idee wie man das lösen kann?

    Wäre sehr dankbar 🙂



  • So, ich habe nach eingehender Fehleranalyse das Problem mit einem etwas schrägen Workaround selbst gelöst. Es lag daran dass nach dem Eintragen einer neuen Stadt der SelectedIndex der ComboBox auf -1 war.
    Verrückterweise war es sogar so, dass wenn ich als StartOrt eine schon vorhandene Stadt ausgewählt habe, und als ZielOrt eine neue Stadt eingegeben habe, dann der SelectedIndex vom StartOrt(!) auf -1 war.

    Durch rumprobieren stellte ich dann fest, dass wenn man die gleichen Einträge der beiden ComboBoxen nochmal auswählt, dann die Indexe wieder stimmen.
    Programmtechnisch habe ich das so bewerkstelligt:

    cbStartOrt.SelectedIndex = cbStartOrt.Items.IndexOf(cbStartOrt.Text);
    cbZielOrt.SelectedIndex = cbZielOrt.Items.IndexOf(cbZielOrt.Text);
    

    Dadurch wählen sich die Boxen mit den gleichen Einträgen nochmal an.

    Grüsse


Anmelden zum Antworten