Dziwne zachowanie KeyValue w DBLookUpComboBox
W przypadku gdy TDBLookUpComboBox (lub TJvDBLoogUpComboBox z pakietu JVCL) jest używane jako lista danych z wybranej tabeli (ListSource), przypisanie wartości polu KeyValue powoduje “wybranie” rekordu z listy. Niestety zdarzyło się, że mimo przypisania poprawnej wartości do KeyValue ComboBox nie zareagował. Podłączony był do DataSource, które z kolei pobierało dane dane z TZQuery (z pakietu Zeos Library), Query natomiast łączyło się z bazą danych MySQL. Zestaw taki był wielokrotnie testowany i nie było z nim problemu, więc trzeba było iść po nitce do kłębka:
W pierwszej kolejności podejrzenie padło na wersję z pakietu JVCL, ale szybko test na standardowej kontrolce wykluczył błąd lookUp’a.
Kolejny w kolejce był lokalnie zainstalowany MySQL w wersji 5. Niestety i tutaj po wrzuceniu bazy na serwer, na którym jest MySQL 4.1. błąd nadal występował.
Przyczyna, jak się okazało, leżała pomiędzy Delphi a Zeose’em. W bazie danych klucz główny był skonfigurowany jako UNSIGNED i podczas pobierania informacji o kolumnach i ich typach wykonywana było konwersja na LongInteger, przez co występowała niezgodność typów. Rozwiązaniem problemu było usunięcie atrybutu UNSIGNED dla klucza głównego i ponowne pobranie informacji o kolumnach.