Toporność DBLookupComboBox

0

Witam

Może najpierw przedstawie pokrótce zagadnienie (rzecz dzieje się gdzieś na odległym serverze IB):

Tabela1
ID INT
T2_ID INT (tutaj są wartości ID z Tabeli2)
...

Tabela2
ID INT
T VARCHAR(10)
...

Teraz robie sobie formatkę do dodawania rekordu do Tabeli1, no i chce aby użytkownik mógł wybrać nie spośród ID tabeli2 tylko spośród kolumny T.

Rzecz prosta, choć podejścia można mieć dwa. Dla baz desktopowych najlepiej nadaje się DBLookUpComboBox, ale już do baz SQL nie bardzo (choćby dlatego że chce zastosować transakcje tylko na czas dodawania rekordu). Można zrobić zwykłego ComboBox'a do którego wpiszemy rekordy z tabeli T2, ale przed dodaniem trzeba z powrotem wyciągnąć ID.
Ja spróbowałem rozwiązania pośredniego, a mianowicie zastosowałem DBLookUpComboBox, ale bez ustalania właściwości DataSource i DataField (Ustawione jest ListSource, ListField i KeyField). Rezultat jest taki, że mam w komponencie wylistowane rekordy, a poprzez właściwość DBLookUpComboBox mam dostęp do klucza tabeli: DBLookUpComboBox.KeyValue. Zyskuje na tym ponadto, że nie muszę się martwić o wypisywanie wartości do listy, bo się to robi automatycznie. Wszystko byłoby piękne gdyby nie fakt, że DBLUCB (DBLookUpComboBox) jest strasznie tooporny w obsłudze (w porównaniu do zwykłego ComboBox'a):
jak jeżdze myszką to się focus nie zmienia,
jak scroluje to j.w.,
pomimo dropdowncount ustawionego na 7 wyświetla się jeden wiersz, czasem 2
no kapota zupełna.
Podejrzewam że jest to rezultat tego że jak by się zmieniał focus jak w ComboBox'ie to by się generował niepotrzebny ruch w bazie (zmiana wartości rekordu), a czasem użytkownik lubi się pobawić scrollem.

Konkludując zapytam, jak to rozwiązujecie (chodzi o bazę SQL - np IB) ? Nie chodzi mi przy tym o rozwiązanie takie żeby działało (ale z 10 dodatkowymi zapytaniami), tylko o rozwiązanie eleganckie, proste i skuteczne i NIE TOPORNE jak DBLUCB.

Pozdrawiam.

P.S. Jak się stosuje pola ty lookup (W IBQuery, albo w kontrolce DBLUCB) to jeśli zbiór danych z którego czerpią one zwracane wartości jest zamknięty to Delphi samo sobie go otworzy ? Czy trzeba o to samemu zadbać ?

0
b0bik napisał(a)

pomimo dropdowncount ustawionego na 7 wyświetla się jeden wiersz, czasem 2

Po Query.Open; daj Query.FetchAll;

1 użytkowników online, w tym zalogowanych: 0, gości: 1