DBLookupComboBox ist leer



  • Hallo!

    Ich versuche gerade eine DBLookupComboBox mit Daten zu füllen. Ich habe das folgendermaßen versucht:

    ADOQuery1->SQL->Add("SELECT * FROM Pruefparameter");
        ADOQuery1->Open();
        DataSource1->DataSet = ADOQuery1;
    
        DBLookupCombo1->LookupSource = DataSource1;
        ADOQuery1->Close();
    

    Beim Start meines Programms werde ich auch aufgefordert, das Passwort für die Datenbank einzugeben. Es kommen keine Fehler, aber die Combobox bleibt leer. Was mache ich falsch?



  • Bist Du Dir sicher, dass ADOQuery ausreichend ist? Versuche mal TADODataSet

    TADODataSet->CommandText = "SELECT ... ";
    Und vergiß ListField nicht.



  • Hallo

    Zunächst einmal braucht die DBLookupComboBox neben der DataSource ja auch noch das Feld was sie anzeigen soll. Das wird in deinem Codeausschnitt nicht gezeigt, also nehme ich mal an das es bei dir nicht gesetzt wird.
    Wichtiger aber ist das die Datenquelle solange aktiv und vorhanden sein muß solange die LookupComboBox etwas anzeigen soll. Da du (laut Codeausschnitt) die Datenquelle aber gleich wieder schließt zeigt dann die Box auch nichts mehr an.

    bis bald
    akari



  • Irgendwie kommt jetzt die Fehlermeldung "LookupSource muss mit TTable-Komponente verbunden werden"
    Der Rechner ist eben nicht mehr aus dem Standby aufgewacht und das Projekt hab ich vorher nicht gespeichert. 😡
    Hab den Code aus meinem Snippet wieder so reinkopiert, wie ich es in Erinnerung hatte, die Komponenten in das Form gezogen und jetzt gehts nicht mehr.



  • Scheinbar stört sich die Komponente an "LookupSource" in Verbindung mit ADOQuery. Ich habe das ganze jetzt nochmal angepasst:

    ADOQuery1->SQL->Add("SELECT * FROM Pruefparameter");
        ADOQuery1->Open();
        DataSource1->DataSet = ADOQuery1;
        DBLookupCombo1->DataSource = DataSource1;
        DBLookupCombo1->DataField = "Datensatzname";
        //ADOQuery1->Close();
    

    Aber Daten habe ich trotzdem noch nicht in der ComboBox 😕



  • Du verwechselst DataSource mit ListSource, DataField mit ListField.



  • Wo finde ich ListSource und ListField?



  • Na, in der DBLookupComboBox.



  • Wenn ich z.B. DBLookupCombo1->L eingebe, werden mir lediglich 5 Eigenschaften aufgelistet: "Left", "LookupDisplay", "LookupField", "LookupSource" und "LRDockWidth"



  • Welche Version des BCB verwendest Du? Bei meinem BCB 6 gibt es die von witte genannten Eigenschaften.



  • Genau das ist auch meine Vermutung. Ich benutze den C++ Builder 2007. Da wird es die Eigenschaft nicht mehr geben. Stattdessen habe ich "LookupDatasource" und "LookupDatafield" aber da kommt wie gesagt, die Meldung "TTable" erwartet. Ich will aber keine TTables einsetzen.



  • Ist es für Dich akzeptabel, TTable zu verwenden und sich auf der Datenbankebene zu behelfen? Eine View als TTable zu verkaufen? Oder eine Stored function die eine Relation als Ergebnis liefert?



  • Nun ja, ehrlich gesagt halte ich TTable für keine gute Idee. TTable fünktioniert nur mit der BDE und Paradox / dBase zuverlässig. Bei ADO-Datenquellen halte ich TTable für ungeeignet. Und TADOTable ist sehr schlampig umgesetzt, für einen Produktiveinsatz nicht geeignet.

    Just my 2 Cents...



  • Ich werde es jetzt wieder auf herkömmliche Weise machen. Also mit einer normalen ComboBox... ich komme so eher zum Ziel und habe die gleiche Funktionalität.
    Aber trotzdem vielen Dank für die Hilfe 😉


Anmelden zum Antworten