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