Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.025 c
14-1083118463
Думкин
2004-04-28 06:14
2004.05.16
С днем рождения! 28 апреля.


6-1079886834
LAndreyL
2004-03-21 19:33
2004.05.16
Кодировка для отправки почты?


8-1076930413
r00t
2004-02-16 14:20
2004.05.16
Компонент, работающий с gif на уровне канвы.


1-1083224549
denpro
2004-04-29 11:42
2004.05.16
Меню и MDI


14-1082631749
Knight
2004-04-22 15:02
2004.05.16
Можно ли в XP сделать одну запись, типа, Default...




   Наверх