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

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

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

Ответить
Аватара пользователя
Unvictis
новенький
Сообщения: 48
Зарегистрирован: 17.07.2015 17:59:12
Откуда: Kokshetau, Kazakshtan
Контактная информация:

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

Сообщение Unvictis »

Всем привет! Есть компонент класса TDBLookupComboBox содержащий имена клиентов из таблицы Clients. И есть таблица Orders в которой хранятся заказы связанные с клиентами через первичный ключ. Мне нужно что-бы когда я ввожу первые буквы инициалов клиента в TDBLookupComboBox он показывал мне всех клиентов на те буквы, которые я ввёл, и из этого я могу выбрать клиента для нового заказа, а если таких клиентов нет, то я продолжу ввод до того момента пока не допишу полные инициалы клиента и можно будет нажать Enter или кнопку рядом для добавления этого клиента в БД и его выбор в TDBLookupComboBox. Подскажите как лучше реализовать подобное поведение? Может есть какие-то готовые компоненты?
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

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

а если нажмёте Enter, то заносите содержимое в базу.
Аватара пользователя
Unvictis
новенький
Сообщения: 48
Зарегистрирован: 17.07.2015 17:59:12
Откуда: Kokshetau, Kazakshtan
Контактная информация:

Сообщение Unvictis »

Спасибо, интересное решение. А насколько оптимален такой алгоритм (по моему настолько частые обращения к БД существенно скажутся на производительности, или я не прав)?
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Делайте не новый запрос каждый раз, а поиск в датасете по функции locate
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

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

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