TDBLookupComboBox: Добавление новой записи
Модератор: Модераторы
- Unvictis
- новенький
- Сообщения: 48
- Зарегистрирован: 17.07.2015 17:59:12
- Откуда: Kokshetau, Kazakshtan
- Контактная информация:
TDBLookupComboBox: Добавление новой записи
Всем привет! Есть компонент класса TDBLookupComboBox содержащий имена клиентов из таблицы Clients. И есть таблица Orders в которой хранятся заказы связанные с клиентами через первичный ключ. Мне нужно что-бы когда я ввожу первые буквы инициалов клиента в TDBLookupComboBox он показывал мне всех клиентов на те буквы, которые я ввёл, и из этого я могу выбрать клиента для нового заказа, а если таких клиентов нет, то я продолжу ввод до того момента пока не допишу полные инициалы клиента и можно будет нажать Enter или кнопку рядом для добавления этого клиента в БД и его выбор в TDBLookupComboBox. Подскажите как лучше реализовать подобное поведение? Может есть какие-то готовые компоненты?
Возьмите обычный комбобокс и при вводе новой буквы (onKeyUp) - делайте запрос в базу/
Результат, который вернёт база - обновляйте в комбобокс.
И будет, вам отображаться, ровно то, что вы хотите в ТЗ.
а если нажмёте Enter, то заносите содержимое в базу.
Результат, который вернёт база - обновляйте в комбобокс.
И будет, вам отображаться, ровно то, что вы хотите в ТЗ.
а если нажмёте Enter, то заносите содержимое в базу.
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Делайте не новый запрос каждый раз, а поиск в датасете по функции locate
Unvictis писал(а):А насколько оптимален такой алгоритм (по моему настолько частые обращения к БД существенно скажутся на производительности, или я не прав)?
Всё зависит от того как у вас организована база данных. Если всё организовано правильно, то безусловно - обращение к базе быстрее чем перебор 1 000 000 фамилий(итераций) в комбобоксе, т.к. база моментально ищет по индексу. Кроме того: "куряга Снег Север" - тоже даёт нужную информацию "поиск в датасете по функции locate". Но всё зависит от объёма фамилий, если их не много в пределах 55 555, то можно каждый раз заново в базу обращаться и вы не увидите разницы даже на медленной машине. Но тогда непонятно как вы эти 55 555 выведите в комбобокс? (в смысле для него это много и человек столько не способен просмотреть и проанализировать)
