DBComboBox alle Werte einer Spalte anzeigen



  • Hallo,
    ich habe in meinem Prgramm eine DBComboBox in der ich mir die Werte einer Spalte meiner Datenbank anzeigen möchte. Leider Zeigt die DBComboBox immer nur einen bzw. den ersten Eintrag der Spalte an, ich denke das liegt daran das die DBComboBox immer nur den Wert anzeigt wo sich gerade der "Zeiger" dar Datenbank befindet.
    Wie mache ich es aber das nun alle Werte angezeigt werden???



  • eine DBComboBox zeigt nur die Werte an die in der Eigenschaft Strings stehen

    es gibt 2 Mödlichkeiten:

    die Werte aus der Datenbank in die DBComboBox eintragen, also jeden Wert in die Strings schreiben, z.B. bei OnDropDown

    um Werte aus der Datenbank anzuzeigen geht auch die DBLookupComboBox, dort kann man in Listsource und Listfield die Datenquelle angeben, die die Werte aus der Datenbank anzeigt.



  • Hier setz ich doch nochmal an. 🙄

    Die DBLookupComboBox zeigt bei mir nichts an.
    Wenn ich ListSource und ListField angebe bekomme ich eine leere ComboBox.

    Bei der DBComboBox zeigt er mir, wie oben angegeben zumindest den ersten Datensatz an. Ich wollte nun aber gerne die Arbeit umgehen, alle Felder selbst in die Strings einzusetzen. Bei mir existieren nämlich mehrere ComboBoxen, die auf verschiedene Tabellen und Felder reagieren sollen.

    Kann mir einer sagen, welche Eigenschaften für die DBLookupComboBox wichtig sind?
    Bei DBComboBox gebe ich nur DataSource und DataField an und erhalte (wenn auch nur den ersten Eintrag) ein Ergebnis.



  • Bei einer TDBComboBox mußt du die Werte von Hand in das Eigenschafts-Array "Items" setzen, s. auch die BCB-Hilfe dazu:

    while (!Table2->Eof)
    {
      DBComboBox1->Items->Add(Table2->FieldByName("Country")->AsString);
      Table2->Next();
    }
    

    Und das DataField ist das Feld der Tabelle, welches geändert werden kann (nicht die Liste!!!), sobald der Anwender einen Wert selektiert.

    Und bei der TDBLookuüpComboBox hast du zwei verschieden Tabellen (+ Spalten):
    - DataSource und DataField: die zu ändernde Tabelle + Spalte
    - ListSource und ListField: die anzuzeigenden Tabellen (Spalten) - Werte

    Wenn du nur die Daten aus der Datenbank anzeigen willst, aber den geänderten Wert nicht in eine andere Tabelle (Spalte) schreiben willst, dann verwende eine einfache TComboBox und fülle die Werte wie oben im Beispiel angegeben.

    Ich hoffe, du kommst mit meiner Kurzerklärung klar... (der Rest steht in der BCB-Hilfe).



  • Jo, damit komm ich klar. Dachte nur ich hätte ein Einstellungsfehler. Dann werde ich die DBComboBox nehmen.

    Vielen Dank!



  • Du kannst auch die TDBLookupComboBox verwenden, um die Liste zu befüllen, auch wenn Du keine DataSource und DataField benötigst (z.B. Filter einer Listendarstellung).



  • Ich weiß, aber darum ging es mir nicht.
    Ich hatte gedacht bei einer DBComboBox mit eingestelltem DataField werden alle Einträge der Tabellenspalte,
    die in DataField angegeben wurde in der Combo aufgelistet. Also so, daß man sich die Schleife sparen könnte.
    Da dem scheinbar nicht so ist, könnte ich auch die einfache ComboBox nehmen, habe mich aber für die DBComboBox entschieden,
    weil ein Freund meinte, daß die Performance über DBComboBoxen bei Datenbanken besser ist als die der einfachen ComboBox.

    Aber dennoch danke für Deinen Hinweis!
    👍 🙂


Anmelden zum Antworten