Поиск в ComboBox

Очень часто ипользуется выбор значения из справочника с помощью ComboBox, но инкрементный поиск позволяет перейти к нужному значению по первой букве или буквам. Я хочу предложить другое решение поиск по любому сочетанию букв по первым, по вхождению с выводом списка удовлетворяющих значений в выпадающем списке.

Поиск в ComboBox

Идею по созданию данного класса подсказал Internet Explorer.При наборе адреса
сайта Explorer выдает список совпадающий по первым с вводимым адресом. Идея
была хорошая и решил я ее применить в своих проектах для выбора значений из
справочников.
И вот просмотрев всю документацию по Combobox я создал данный класс.

Для его использования необходимо определить следующие свойства:

IncrementalSearch - определяет возможность поиска (.T. - поиск разрешен, .F. -
поиск запрещен)
RowSource - определяет источник данных. Источником данных всегда является SQl
команда которая выбирает значения для выбора их из Combo.
cNmTexAlias - определяет наименование курсора в которое выбираются данные с
помощью SQL-Select'а, чтобы при закрытии Destroy объекта закрыть
открытый в данный момент курсор (т.е. убираем мусор за собой)
сSrchRowSource - данное свойство управляет поиском, здесь и можно определить
как искать введенное выражение по первым буквам или любое
совпадение символов. Поиск построен с использованием LIKE
SELECT-SQL поэтому действуют все правила для LIKE.

Примеры значений свойств:
1. Поиск по первым символам

RowSource="SELECT name, id, UPPER(name) FROM S_pred ORDER BY 3 INTO CURSOR
TexSrch"
сSrchRowSource="THIS.cOldRowSource+' WHERE UPPER(name) LIKE ['+;
UPPER(THIS.cLocateExpression)+'%] UNION SELECT ['+;
THIS.DisplayValue+'], ['+THIS.Value+'], CHR(0) FROM TexCboSearch '"
cNmTexAlias="TexSrch"

2. Любое совпадение символов

RowSource="SELECT name, id, UPPER(name) FROM S_pred ORDER BY 3 INTO CURSOR
TexSrch"
сSrchRowSource="THIS.cOldRowSource+' WHERE UPPER(name) LIKE [%'+;
UPPER(THIS.cLocateExpression)+'%] UNION SELECT ['+;
THIS.DisplayValue+'], ['+THIS.Value+'], CHR(0) FROM TexCboSearch '"
cNmTexAlias="TexSrch"

3. Выбор значений из основной таблицы по определенным условиям.

RowSource="SELECT name, id, UPPER(name) FROM S_pred ORDER BY 3 INTO CURSOR
TexSrch WHERE Group="1""
сSrchRowSource="THIS.cOldRowSource+' AND UPPER(name) LIKE [%'+;
UPPER(THIS.cLocateExpression)+'%] UNION SELECT ['+;
THIS.DisplayValue+'], ['+THIS.Value+'], CHR(0) FROM TexCboSearch '"
cNmTexAlias="TexSrch"
** Следует обратить внимание что WHERE располагается в конце SELECT-SQL, а
всвойстве WHERE заменяется на AND. Будьте внимательны, т.к. используется в
коде макроподстановка.

P.S. И еще одно замечание, если необходимо из основной таблицы выбирать больше
полей то в свойство cSrchRowSource необходимо указать CHR(0) или другое
выражение чтобы правильно работал UNION.
Ну и последнее обязательно определяйте ORDER BY по отдельной строке иначе
введенное поисковое выражение не будет располагаться в верхней строке.

Все замечания, пожелания и вопросы присылайте на E-mail.

С наилучшими пожеланиями.

Иван Олейник.
E-mail: oleynik99@mail.ru

Автор: Vanka

Автор публикации

не в сети 20 лет

Vanka

0
Комментарии: 0Публикации: 1Регистрация: 25-04-2001
0
Вложенные файлы
#
Тип файла
Размер
Название
1 .zip 301CboSearch
Оставить комментарий
Авторизация
*
*
Генерация пароля