Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
11-1069871866
Юрий Ж.
2003-11-26 21:37
2004.05.16
Глючки в кол?


8-1076485798
*BES*
2004-02-11 10:49
2004.05.16
TMediaplayer для нескольких звуковух


14-1082639764
Ditrix
2004-04-22 17:16
2004.05.16
Требуется квалифицированный программер


6-1080481375
Diz
2004-03-28 17:42
2004.05.16
Проблемы с POP3


7-1080668795
CAHEK
2004-03-30 21:46
2004.05.16
Как сменить изображение стрелки ярлыка(Програмно)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский