Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Опять возращаемся к 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]

А что, каждое - это напряжно?
Хочется только каждое третье ловить?


Наверх

Титульная страница Поиск, карта сайта Написать письмо