Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Опять возращаемся к 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
3-1082614389
Andriy Tysh
2004-04-22 10:13
2004.05.16
ClientDataSet & AggregatesFields


1-1083227462
AmazdDexter
2004-04-29 12:31
2004.05.16
Random Form Show


3-1081418073
ev
2004-04-08 13:54
2004.05.16
Как через SQL запрос найти вложенную страку в поле БД, без учета


9-1072161089
Dmitrich
2003-12-23 09:31
2004.05.16
Перемещение юнита


1-1083227723
senya
2004-04-29 12:35
2004.05.16
PDF не понимает русский язык, выдает "иероглифы"