DBLookupComboBox im Borland Builder 5



  • Ich habe ein Problem mit der DBLookupComboBox im Borlanf Builder 5.

    Eigentlich funktioniert diese Komponente. Wenn jedoch das Keyfeld aus vermeitlich zwei identischen Einträgen besteht (macht es aber nicht, einmal in Groß- und einmal in Kleinbuchstaben), so wird im ungünstigsten Fall der Flasche Eintrag in der ComboBox angezeigt.

    Gibt es hier Abhilfe?



  • Und der Primärschlüssel in der DB-Tabelle ist eine Stringspalte? Kannst Du da kein int nehmen o.ä.



  • Ja, ist vom Typ "VARCHAR2" ->Also ein String
    Nein, hier sind schon Bestandsdaten enthalten, die ich nicht ändern kann/ darf.

    Bsp.
    TT.MON
    TT.Mon

    oder

    TT.MON YYYY
    TT.Mon YYYY



  • Diese VARCHAR2-Spalte ist also der Primkey im Master und wird im Fremdschlüssel der Detail referenziert? Und die Combobox hat den Master als ListSource und das Detail als DataSource, dient also dem Zuweisen eines Masters im Detailssatz?
    Bei mir unter BCB6/DBExpress läuft das einwandfrei case sensitive.



  • Ja, genauso ist die Konstellation...
    Also im Builder 6 funktioniert es? Gibt es eine Einstellmöglichkeit für "case sensitive"?



  • MaVoj schrieb:

    Gibt es eine Einstellmöglichkeit für "case sensitive"?

    Mit Sicherheit wirst Du in den DataSets suchen müssen (habe TSQLClientDataSet verwendet. Dort gibt es keine solche Option, nur Indizies, die case (in)sensitive sein können. Vllt damit mal rumspielen.



  • Leider kann ich so eine Einstellung hier nicht finden.
    Habe echt schon alles durch.

    Kann es sein, dass die Komponente ansich buggy ist?



  • Hi,

    warum soll die Komponente an sich buggy sein, blos weil sie mit Schrott-Daten nicht klar kommt.

    hau ein zusätzliches Feld mit eindeutigem Schlüssel dran z.B. autoinc und nimm das als Keyfield und lass ein Listfield anzeigen.

    Gruß Mümmel



  • muemmel schrieb:

    warum soll die Komponente an sich buggy sein, blos weil sie mit Schrott-Daten nicht klar kommt.

    Hallo Mümmel,
    sind keine Schrottdaten. Ist eben eine knappe CodeTabelle, wo der P-Key casesensitive ist. Was ist daran bitte Schrott?



  • Hi,

    zumindest in Bezug auf die vorgesehene Verwendung.
    wenn Du in der eigentlichen Datenbank nichts ändern willst, versuch es doch mal mit einem calculierten Feld als Keyfield, z.B. String bis zur Maximallänge des Feldes mit Leerzeichen ... auffüllen und ne CRC-Prüfsumme anhängen. Dann wirds wieder einheitlich.

    Gruß Mümmel



  • Das klingt super.
    Kannst du mir das mit den "calculierten Feldern" etwas genauer erklären?



  • Ich würde es in diesem Fall auch per Hand machen. Also in beiden DataSets noch eine int-Spalte dranhängen, nach dem Laden der Daten in beide Sets die Spalte im Master durchnumerieren, einfach Zeilennummer wählen (muesste auch mit ein CalculateType gemacht werden können). Im Detail testen, ob ein Lookupfield bereits ausreichend ist (zu der neuen int spalte, als lookup dient deine Stringschlüsselbeziehung). Wenn nicht musst händisch die int-Fremdschlüssel im Detail nachtragen. Dann in der Combobox die int-spalten als keys verwenden und vor dem Aktualisieren in die DB die Stringschlüssel nachtragen. Ist doch einfach oder? 😮



  • Hi MaVoj

    Doppelklick auf TTable-Objekt (oder was eben sonst).
    Alle benötigten Felder hinzufügen
    Rechter Mausklick in Feldeditor ->neues Feld
    Name, Typ, und passende Länge auswählen und Berechnet anklicken
    In OnCalcFields das Feld mit Inhalt füllen. also für Einhaltung alphabetischer Reihenfolge erst den String, dann mit Leerzeichen auffüllen bis Maxlänge des Ausgangsfeldes erreicht ist
    Dann Itoa( CRC-Summe oder was ähnliches ) dranhängen. (ich benutze da Sherlog-Hash-funktion
    Dabei aber auf keinen Fal Edit oder Post benutzen.

    Gruß Mümmel


Anmelden zum Antworten