![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Опять возращаемся к DBGrid [D6, Paradox]
highlander © (2004-04-22 16:37:00)Интересная задачку мне поставили наши бухгалтера. Есть программа, в которой выполняется некий SQL-запрос к базе Парадокс и результат выполнения этого запроса выводится в DBGrid. После чего в этом DBGrid'е необходимо осуществить поиск в стиле 1С. т.е., курсор устанвливаем на поле с текстом, набираем два первых символа записи в поле и курсор устанавливается в место где запись наиболее соответствует веденным символам. Как-же это осуществить? Отлавливать каждое нажатие клавиши7
Наталия (2004-04-23 11:50:00) [1]>Отлавливать каждое нажатие клавиши7
Можно поставить таймер и начинаем поиск, только когда, например, интервал между нажатиями больше 1 сек. То есть если пользователь несколько букв подряд вводит быстро, то пока не искать, как только приостановился - поиск пошел...
Sergey13 (2004-04-23 11:48:00) [2]2stud © (23.04.04 11:41) [14]
Если покупать все на что денег хватает, то их ни на что не хватит.
8-)
Афоризм придумал!!! Во как!!!.
Перепечатка, только с указанием автора. 8-)
highlander (2004-04-23 11:47:00) [3]спасибо > Курдль!!!
Именно таким методом я и воспользовался. База ведь небольшая - не больше 4 тыс. записей. Работает достаточно быстро и надежно. Всем спасибо за внимание!!! :-)
Курдль (2004-04-23 11:44:00) [4]
> "По контексту" - это по вхождению?
"По контексту" - это по произвольному фрагменту поля.
А может и не поля! А может не фрагменту! Т.е. вся Ваша фантазия может быть реализована в процедцуре сравнения, о которой я говорил.
stud (2004-04-23 11:41:00) [5]
> Sergey13 © (23.04.04 11:38) [13]
если хватило денег на дельфи, на квантумы тоже хватит))))
Sergey13 (2004-04-23 11:38:00) [6]2Курдль © (23.04.04 11:25) [12]
>Компоненты dxDBGrid, dxDBTreeList из набора "Quantum Grid" все это умеют - и по первым символам (к сожалению не по контексту) и по произвольному фильтру. Лучших я пока вообще не встречал.
"По контексту" - это по вхождению? EhLib может. К тому же сравнивая стоимость продуктов... 8-)
Курдль (2004-04-23 11:25:00) [7]
> 10 000 тоже будет не подарок, ведь контекстный поиск это
> по вхождению в строку, индекс не используется, перебром
> и это после каждого изменения... нажал жди еще нажал еще
> жди.
Именно с 10 000 все работает влёт. И никаким "перебором"! Я же сказал - выставляешь свойство ДатаСэта Filtered и делаешь свою обработку onFilterRecord.
> Возьми EhLib. реализован отличный поиск по любому полю с множеством вариантов условий и т.д.
Компоненты dxDBGrid, dxDBTreeList из набора "Quantum Grid" все это умеют - и по первым символам (к сожалению не по контексту) и по произвольному фильтру. Лучших я пока вообще не встречал.
Sergey13 (2004-04-23 08:30:00) [8]Возьми EhLib. В версии 3.3(может и раньше было - незамечал 8-) реализован отличный поиск по любому полю с множеством вариантов условий и т.д. И все даром. 8-)
sniknik (2004-04-22 18:50:00) [9]10 000 тоже будет не подарок, ведь контекстный поиск это по вхождению в строку, индекс не используется, перебром и это после каждого изменения... нажал жди еще нажал еще жди.
Курдль (2004-04-22 17:59:00) [10]
> а ты пробовал подобный контекстный поиск на таблице хотябы
> с парой сотен тысяч записей?
> на каждое изменение, да без использования индексов... нет
> уж лутше по первым а для контекстного отдельный поиск по
> уже набраной фразе.
Я редко даю юзерам болше 10 000 записей. Нефиг! Всегда найдутся условия выбора типа "а Вам унитазы фарфоровые или керамические? Белые или с каёмочкой? Навесные или стоячие?" и т.п.
VAleksey (2004-04-22 17:39:00) [11]1) Все-таки Locate
2) DBGridEh поробовать посмотреть.
Соловьев (2004-04-22 17:02:00) [12]
> highlander (22.04.04 17:00) [6]
нет, не может. Вот лентяй...
Хотя... есть. Сколько у.е. даешь?
highlander (2004-04-22 17:00:00) [13]еще соображения будут? например, может есть готовые компоненты. например может ли такое делать RxDBGrid?
sniknik (2004-04-22 16:51:00) [14]> Причем это дает возможность искать вообще по контексту
а ты пробовал подобный контекстный поиск на таблице хотябы с парой сотен тысяч записей?
на каждое изменение, да без использования индексов... нет уж лутше по первым а для контекстного отдельный поиск по уже набраной фразе.
Курдль (2004-04-22 16:46:00) [15]Да! Именно отлавливать каждое нажатие клавиши (точнее - изменение компонента, в который вводится текст фильтра). А потом - обрабатывать OnFilterRecord в DataSet-е.
Причем это дает возможность искать вообще по контексту, а не по первым символам (например, если есть название организаций, да еще полные - задолбаетесь набирать "Зактытое акционерное общество..."). По этой причине не подошли даже самые продвинутые компоненты - они именно "по первым..."
Соловьев (2004-04-22 16:44:00) [16]
> highlander (22.04.04 16:37)
Edit.OnChange:
Table.FindNearest([(Sender as TEdit).Text]);
stud (2004-04-22 16:40:00) [17]самый простой способ, использовать компонент, в котором это уже реализовано. а еще проще вводить например в едите и через локате искать в гриде
Reindeer Moss Eater (2004-04-22 16:40:00) [18]А что, каждое - это напряжно?
Хочется только каждое третье ловить?