Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 18

Поиск по ходу ввода данных (ADO)

19.01.2012, 12:27. Показов 3795. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Необходимо осуществить поиск по полю БД (в моем случае Access, поле - ФИО) с использование ADO таким образом, чтоб поиск осуществлялся по уже набранным символам и в выпадающем списке выходил результат поиска (в идеале с подсветкой символов которые совпали), т.е. поиск выполнялся после ввода каждого следующего символа. Подскажите плз, в какую сторону копать. Заранее благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2012, 12:27
Ответы с готовыми решениями:

Поиск вещественных данных в ADO
Есть поиск (с помощью Edit ищет данные в DBGrid), но ищет только числовые значения, в остальных случаях бьёт ошибку, что искомый аргумент...

Поиск в базе данных группа радиокнопок, 1 поле ввода, 1 кнопка
Объясните как можно создать поиск в таблице? Поиск запускается при помощи кнопки, искомая информация вводится в поле ввода, группа...

Поиск в БД (ADO)
Приветствую. Такая у меня проблема. Создал я таблицу в Access, подключился в дельфи, все заработало, написал процедуры добавления,...

5
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
19.01.2012, 13:04
в сторону like (запрос или фильтр).
Или в сторону lookup, locate (поиск в датасете).
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
19.01.2012, 13:41
Для начала определиться с контролами, куда вводятся "символы" - то ли это грид, то ли TEdit. Определив нужный контрол, создаем для него обработчик нужного события:
1) TEdit
Событие OnChange - после каждого изменения содержимого выполняется Locate для набора данных

Пример:

Delphi
1
2
3
4
5
procedure TForm1.Edit1Change(Sender: TObject);
begin
   if TEdit(Sender).Text>'' then  // Поиск не выполняется если нет ничего (пусто)
      ADODataSet1.Locate(ADODataSet1.FieldByName(<Имя поля, где искать>,[loPartialCase,loInsensitivity]);
end;
2) DBGrid
У грида нет события OnChange как у эдита. Поэтому можно взять то, что есть, а именно событие OnKeyPress.
Дальше - сложнее. Дело в том, КАК ПОКАЗЫВАТЬ то, что ввел пользователь - ведь в активной ячейке имеется некоторая информация, которую нельзя менять !
Поэтому имеется несколько вариантов:
а) Как в 1С - каждый введенный символ добавляется к предыдущему в хвост, полученный образец "накладывается" на колонку (поле) следующим образом - сначала выполняется поиск все тем же Locate и, если находится запись, то цветом выделяется часть ячейки, совпавшая с образцом. Однако реализация этого способа самостоятельно нетривиальна для новичка (надо работать напрямую с TInplaceEdit)
б) Встраиваемый в грид TEdit. Поверху грида рисуется и встраивается точно в активную ячейку TEdit, для которого все пишется также, как и для эдита в 1).
Показ Эдита делается во время нажатия клавиши с символом или спец.функции (например Ctrl+F), а прятание - при "уходе" из самого эдита
в) Модальная формочка (ИМХО, самый универсальный способ), в которой можно предусмотреть несколько вариантов поискового сервиса - от поиска первой до поиска всех похожих и размещения найденных в отдельный список, по которому возможна навигация.

Добавлено через 5 минут
Для варианта с эдитом (самом простого).
Чтобы сделать так, как в офисе (т.е. давать выбирать из ранее набранных в сеансе образцов) - просто заменить TEdit на TComboBox. В его обработчике OnChange перед началом поиска добавить поиск введенного образца в списке комбобокса и, если его там нет, то добавлять.
Все

Добавлено через 4 минуты
Важный момент !
Чтобы предотвратить срабатывание OnChange когда это не нужно (например при начальном заполнении эдита или бокса) надо добавить в обработчик еще и это:
if not TWinControl(Sender).Focused then exit;
Т.е. "срабатывать" событие должно только в том случае, когда содержимое меняется именно пользователем - а это бывает только если фокус в контроле
1
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 18
20.01.2012, 09:09  [ТС]
Как бы задумка такая:
Ввод будет осуществляться во что-нить с выпадающим списком (ComboBox, DBLookupComboBox, DBComboBox) этот комбобокс будет заполняться данными из определенного поля таблицы, соответственно фильтр (наверно так более коректно) будет накладываться на данные из этого же поля и обновлять данные комбобокса
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
20.01.2012, 11:01
DB-aware нельзя
0
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 18
20.01.2012, 15:14  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
DB-aware нельзя
Это утверждение или вопрос? Если вопрос, то погуглив ни чего понятного не нашел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.01.2012, 15:14
Помогаю со студенческими работами здесь

Поиск в ADO
Я сделал поиск в своей БД и у меня есть поля с пустыми значениями. Как сделать так, чтобы при выводе информации о сотруднике после поиска...

Реализовать повтор ввода данных в программу или отказ от ввода
Программа должна вычислять произведение двух чисел и спрашивать завершать программу или нет, если нет то продолжать запрашивать данные...

Реализовать контроль ошибок ввода данных в поле, предназначенное для ввода пароля
4.Реализовать в JavaScript контроль ошибок ввода данных в поле, предназначенное для ввода пароля.

Реализовать контроль ошибок ввода данных в поле, предназначенное для ввода времени
5.Реализовать в JavaScript контроль ошибок ввода данных в поле, предназначенное для ввода времени.

Расширенный поиск в ADO
Объясняю ситуацию: у меня есть база данных(Access) и с помощью ADO я с ней работаю; необходимо сделать поиск по соответствующему полю,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru