Поиск в 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
Вложенные файлы
# |
Название |
Тип файла |
Размер |
---|---|---|---|
1 | 301CboSearch | .zip | 107,43 КБ |