TDBLookupComboBox: Добавление новой записи

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TDBLookupComboBox: Добавление новой записи

Сообщение Unvictis » 22.07.2015 18:39:09

Всем привет! Есть компонент класса TDBLookupComboBox содержащий имена клиентов из таблицы Clients. И есть таблица Orders в которой хранятся заказы связанные с клиентами через первичный ключ. Мне нужно что-бы когда я ввожу первые буквы инициалов клиента в TDBLookupComboBox он показывал мне всех клиентов на те буквы, которые я ввёл, и из этого я могу выбрать клиента для нового заказа, а если таких клиентов нет, то я продолжу ввод до того момента пока не допишу полные инициалы клиента и можно будет нажать Enter или кнопку рядом для добавления этого клиента в БД и его выбор в TDBLookupComboBox. Подскажите как лучше реализовать подобное поведение? Может есть какие-то готовые компоненты?
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: TDBLookupComboBox: Добавление новой записи

Сообщение vitaly_l » 25.07.2015 17:12:51

Возьмите обычный комбобокс и при вводе новой буквы (onKeyUp) - делайте запрос в базу/
Результат, который вернёт база - обновляйте в комбобокс.
И будет, вам отображаться, ровно то, что вы хотите в ТЗ.

а если нажмёте Enter, то заносите содержимое в базу.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TDBLookupComboBox: Добавление новой записи

Сообщение Unvictis » 25.07.2015 18:34:31

Спасибо, интересное решение. А насколько оптимален такой алгоритм (по моему настолько частые обращения к БД существенно скажутся на производительности, или я не прав)?
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: TDBLookupComboBox: Добавление новой записи

Сообщение Снег Север » 25.07.2015 21:39:53

Делайте не новый запрос каждый раз, а поиск в датасете по функции locate
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: TDBLookupComboBox: Добавление новой записи

Сообщение vitaly_l » 26.07.2015 11:18:36

Unvictis писал(а):А насколько оптимален такой алгоритм (по моему настолько частые обращения к БД существенно скажутся на производительности, или я не прав)?

Всё зависит от того как у вас организована база данных. Если всё организовано правильно, то безусловно - обращение к базе быстрее чем перебор 1 000 000 фамилий(итераций) в комбобоксе, т.к. база моментально ищет по индексу. Кроме того: "куряга Снег Север" - тоже даёт нужную информацию "поиск в датасете по функции locate". Но всё зависит от объёма фамилий, если их не много в пределах 55 555, то можно каждый раз заново в базу обращаться и вы не увидите разницы даже на медленной машине. Но тогда непонятно как вы эти 55 555 выведите в комбобокс? (в смысле для него это много и человек столько не способен просмотреть и проанализировать)
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 240

Рейтинг@Mail.ru
cron