Announcement

Collapse
No announcement yet.

Werte werden in der LookupComboBox übersprungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Werte werden in der LookupComboBox übersprungen

    Hallo,
    ich hab da ein Eigenartiges Problem. Ich verwende eine LookupComboBox. Wenn ich nun die Liste aufklappe und einen Wert mit der Maus auswählen will wird immer der Wert, den ich will einfach übersprungen und der darüber oder darunter liegende Wert erscheint in der ComboBox. Das Auswählen über die Tastatur funktioniert dagegen. Woran kann das liegen ?

    Gruß Elke

  • #2
    Elke,

    verwendest Du zur Auswahl des Listeintrages das Rad einer Wheelmouse? Ich könnte mir vorstellen, dass das Probleme macht.

    BTW: Wie kann man die umgehen <g>?

    Ralp

    Comment


    • #3
      nein, ich verwende auf meinem Notebook ein Touchpad und auf meinem PC eine ganz normale 3Tasten Maus. Auf beiden Rechnern habe ich das gleiche Problem.

      Gruß Elk

      Comment


      • #4
        Hallo Elke,

        das scheint ein Problem der DBComoboBox zu sein. Ich hatte / habe diesen sonderbaren Effekt auch. Ich hab auch keinen Workaround dazu gefunden. Aber das und einige andere "Kleinigkeiten" sind der Grund dafür, warum ich die DBComboBox nicht mehr verwende und auf Alternativen ausgewichen bin.

        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Wenn das so ist, hieße das ja, dass die ComboBoxen im Proinzip ja gar nicht zu gebrauchen sind. Denn was will man denn mit einer ComboBox, aus der man nichts auswählen kann ? Das kann ich mir aber eigentlich nicht vorstellen, denn nach 5 Delphi Versionen müsste dieses Problem doch irgendwann mal von irgendjemand erkannt und dann auch behoben worden sein. Kann das nicht an etwas anderem liegen ?

          Gruß Elk

          Comment


          • #6
            Hi, ich muss bei diesem Thema doch noch mal nachhaken. Gibt es denn wirklich keine Lösung für die ComboBoxen ? Oder muss ich tatsächlich mein ganzes Programm noch mal umschmeißen ! Ich kann's einfach nicht glauben. Vielleicht fällt ja doch noch jemandem etwas ein.

            Gruß Elk

            Comment


            • #7
              Hallo,

              es gibt keinen Grund, die TDBLookupComboboxen aus dem Programm zu werfen. Wenn es bei diesem Programm ein Problem gibt, muss die Ursache eingegrenzt werden: <br>
              1. Welche Delphi-Version mit welchem installierten Patch wird verwendet? <br>
              2. Welche Datenbank wird verwendet? <br>
              3. Verwendet die Datenbank Primär- und Fremdschüssel für die betroffenen Spalten?<br>
              4. Wie sieht ein kleines Testprogramm aus, mit dem dieser Effekt jederzeit reproduziert werden kann?

              Um sicher zu gehen, dass hier kein Missverständnis vorliegt, skizziere ich das Prinzip. Die anzuzeigende Tabelle verwendet eine Spalte, in der nur der Fremdschlüsselwert (INTEGER) auf einen zugeordneten Datensatz einer anderen Tabelle gespeichert wird. Der Benutzer soll jedoch anstelle der Zahl des Fremdschlüssels die dazugehörende Bezeichnung auswählen können, wobei TDBLookupCombobox die angezeigte Beschriftung automatisch in die zu speichernde Zahl "übersetzt".
              &#10

              Comment


              • #8
                Hallo Andreas,

                Danke erst mal für's Mutmachen.

                1. Ich verwende Delphi 5 Prof. und habe ADOExpress, UpdatePack1 und 2 installiert.
                2. Als Server verwende ich InterBase, eingebunden über ADO in Delphi, unter Verwendung des IBProviders.
                3. Ja, es werden Primär- und Fremdschlüssel verwendet. Es ist vielleicht noch wichtig zu erwähnen, dass das Problem bei den LookupComboBoxen auftritt, die nur zu dem Zweck eingesetzt werden, zugehörige Daten aus einer anderen LookupComboBox anzuzeigen. Die Anzeige erfolgt in einem OnDataChange Ereignis der DataSource. Das Problem wurde schon ausgiebig imThread "Kombination von Tabellenfeldern in DBLookupComboBox" diskutiert. Scheinbar werden auch nur bestimmte Namen, bzw. Nummern übersprungen.
                4. Es sind zwei LokkupComboBoxen eingesetzt. in der 1. kann z.B. die Kundenid gewählt werden, in der 2. der KundenName (je nachdem was bekannt ist).

                procedure TDataModule3.DataSource8DataChange(Sender: TObject;
                Field: TField);

                begin

                AuswertForm1.DBLookupComboBox3.KeyValue := ADODataSet8.FieldByName('Kundenid').AsString;

                AuswertForm1.DBLookupComboBox4.KeyValue := ADODataSet8.FieldByName('Kundenid').AsString

                end;

                Diese DataSource und ADODataSet Komponenten werden nur für die Comboboxen eingesetzt.

                Ich hoffe das reicht als Beispiel. Wenn nicht, muss mal schaun, ob ich da noch was zusammenbasteln kann. (Ich bin im Moment nämlich sehr knapp in der Zeit)

                Gruß Elk

                Comment


                • #9
                  Hallo,

                  &gt;...Scheinbar werden auch nur bestimmte Namen, bzw. Nummern übersprungen. ..<br>
                  &gt;..zwei LokkupComboBoxen eingesetzt..Kundenid..KundenName

                  bilden wirklich die Spalten <i>Kundenid</i> <b>und</b> <i>KundenName</i> in dieser Tabelle getrennte Fremdschlüssel auf andere Tabellen? Wenn beide TDBLookupComboBoxen ihre Referenzdaten aus der <b>gleichen</b> Datenmenge (ADODataSet8) beziehen, muss man sich nicht wundern, wenn sich beide ins Gehege kommen.

                  Ich würde die Datenmenge aus ADODataSet8 über <b>Clone</b> auftrennen, so dass jede TDBLookupComboBox-Instanz ihre eigene Datenmenge erhält.

                  Mit dem Aufruf der RecordSet-Methode <b>Clone</b> wird die Objektinstanz dupliziert, so dass der Client nun über zwei Interface-Zeiger auf zwei Objektinstanzen zugreifen kann. Somit ist das clonen schneller und effektiver als das reguläre Erzeugen eines neuen RecordSet-Objekts mit dem anschliessenden Abfordern der Datenmenge von der SQL-Datenbank. Allerdings greifen alle geklonten RecordSet-Objektinstanzen auf die <b>gleichen Daten</b> zurück, sowohl das Original als auch der Clone arbeiten unmittelbar nach dem Clonen mit der gleichen Datenmenge des Originals.

                  Um den Aufwand für das Clonen zu minimieren, geht ADO standardmässig davon aus, dass der Clone nur ein anderer Zeiger auf die Daten darstellt. Beide RecordSet-Instanzen können bei Lesezugriffen völlig unabhängig voneinander mit den Daten hantieren. Das Positionieren eines Datensatzes, das Filtern der Datenmenge sowie das Verwalten der Bookmarks ist unabhängig. Unmittelbar nach dem Clonen ist die geclonte RecordSet-Instanz auf dem ersten Datensatz positioniert, unabhängig davon, welcher Datensatz beim Original-RecordSet-Objekt ausgewählt war.
                  &#10

                  Comment

                  Working...
                  X