Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

Фильтрация в DBGrid   Найти похожие ветки 

 
Lamka   (2004-12-20 17:31) [0]

Доброго времени суток уважаемые мастера. У меня проблема мне нужно отфильтровать текст в DBgrid я использую этот код
table1.filtered := true
table1.filter := "FieldName like " + chr(39) + trim(Edit.text) + "%" + chr(39);
Но при наборе текста в Edit Delphi выдаёт ошибку.В чём дело?


 
Соловьев ©   (2004-12-20 17:48) [1]

при наборе текста в Edit

то что ты привел и ошибка не связаны.


 
msguns ©   (2004-12-20 17:51) [2]

Перед тем, как юзер начинает вводить значение в эдит, надо давть датасету DisabledControl, а по завершению проверять корректность введенной инфы и, если правильно, EnabledControl датасету.
А вообще рисковый способ выбран ;))


 
Lamka   (2004-12-20 18:08) [3]

msguns ©  
А вы знаете другой способ?


 
Lamka   (2004-12-21 13:09) [4]

Помогите лаёмеру, пожалуйста.


 
Anatoly Podgoretsky ©   (2004-12-21 13:17) [5]

А есть ли ошибка?


 
Соловьев ©   (2004-12-21 13:17) [6]

table1.filtered := true
table1.filter := "FieldName like " + chr(39) + trim(Edit.text) + "%" + chr(39);
Но при наборе текста в Edit Delphi выдаёт ошибку.В чём дело?

1. Укажи ошибку.
2. Приведи код. Потому как то что ты привел - НЕДОСТАТОЧНО!


 
msguns ©   (2004-12-21 13:19) [7]

Ты бы сформулировал почетче:
Если тебе нужна контекстная фильтрация/поиск, т.е. как только узер ввел буковку, то тут же и ищется/фильтруется, еще одну ввел, то снова ищется/фильтруется, то это одно. И чревато оно тем, что сложноватисто работает с несимвольными типами полей.
Если же фильтрация/поиск "по кнопке", т.е. узер ввел шаблон, нажал кнопку и только тогда ищется/фильтруется, то это другое.

Контекстный поиск, ИМХО, смысл имеет, да и быстрый он. А вот контекстная фильтрация (опять же ИМХО) - на фиг не нужна - только тормозить будет, да и смысла лишена. Фильтруют обычно по  значениям каких-то полей, т.е. это смысловая выборка. Например, показать только приходные накладные или только персонал X-го отдела и т.д. Фильтр же, к примеру, по месяцу или периоду должен выполняться через доп.условия выборки, но не фильтром. Да и вообще метод работы через Ttable изначально обречен на кучу траблов, не последние из которых есть тормоза.


 
Zacho ©   (2004-12-21 13:55) [8]

Lamka   (20.12.04 18:08) [3]
А вы знаете другой способ?


Совет №1: вместо + chr(39)+ использовать AnsiQuotedStr

> Помогите лаёмеру, пожалуйста.

А вот этого не надо. Зачем себя унижать ? Такое только уменьшает вероятность корректного ответа. Читай http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
Lamka   (2004-12-21 16:45) [9]

msguns ©  
Мне нужна контекстная фильтрация.


 
Lamka   (2004-12-21 17:05) [10]

Соловьев ©  
Вот тебе ошивка: Filter expression incorrectly terminatea.


 
Sergey13 ©   (2004-12-21 17:15) [11]

2[9] Lamka   (21.12.04 16:45)

>[7] msguns ©   (21.12.04 13:19)
>А вот контекстная фильтрация (опять же ИМХО) - на фиг не нужна - только >тормозить будет, да и смысла лишена.
[9] Lamka   (21.12.04 16:45)
>msguns ©  
>Мне нужна контекстная фильтрация.

8-). А зачем? Сможешь объяснить?


 
Sashok   (2004-12-21 17:21) [12]

Sergey13 ©  
Короче я делаю телефонный справочник и удовнее будет фильтровать по одной букве.


 
Lamka   (2004-12-21 17:22) [13]

Sergey13 ©  
Короче я делаю телефонный справочник и удовнее будет фильтровать по одной букве.


 
msguns ©   (2004-12-21 17:30) [14]

>Sashok   (21.12.04 17:21) [12]
>Короче я делаю телефонный справочник и удовнее будет фильтровать по одной букве.

Да хоть список членов клуба кастратов ! Какая разница ???
На фига обязательно фильтровать ?

Да замени ты этот долбанный Table на Query и по событию OnChange в эдите, где узер вводит этот твой номер, перестраивай запрос и переоткрывай его !
Но я бы такой справочник не юзал бы ни за какие ковриги.

Ты можешь сделать отображение найденных в отдельном окне (или листвьюхе, например) с локэйтом номера в основном списке по клику на нем ? Ведь это куда удобнее. Кроме того, ну объясни мне, тупому невежде, никогда не пользовавшемуся телефоном, ну на кой мне все телефоны на цифру "2", а ? Меня же интересует конкретный номер, и пока я его наберу, твое чудо чудесное раз 6-7 (а если я еще буду исправлять ошибки, то и все 10) раз будет моргать с жуткими тормозами ! Я уж молчу о наборе фамилий ;(( или адресов ;(((


 
Соловьев ©   (2004-12-21 17:31) [15]

TTable.FindNearest + F1 , смотри Examle


 
msguns ©   (2004-12-21 17:42) [16]

Кстати, недавно видел подобное "творение". Показывает все телефоны города в порядке возрастания номеров, посортировать нельзя - вето, видимо. Есть, ясен красень, поиск. Крут, как пасхальное яйцо-чемпион. Но беда в том, что я не знаю, как он написал в этой свой базе улицу: то ли "Веревки", то ли Григория Веревки. То ли ул.Веревки, то ли ул.Г.Веревки, то ли пер.Веревки.
Короче, сколько я ни набирал - ни фига не получил.
Залез в папку с прогой, глянул - ага ! эмдебе, ясненько. Открываю "любимый до слез" аксез. Даю запрос с сортировкой по улице и с предикатом %ВЕРЕВК%. Через полсекунды получаю список из 30-40 строк, где наблюдаю, что огурец позаводил енту улицу и как "Григория Веревки", и как "Гр.Веревки", и как "Г.ВЕРЕВКИ" и еще много как. Номер я, конечно, нашел (надо было по дому и квартире), но получил при этом один вопрос "а на хрена мне, собственно, эта прога ?" Если я из акцеса найду все, что надо куда быстрее и с меньшими нервными потерями, а ?

Ты, случаем, не подобный шедевр ваяешь ?


 
Sergey13 ©   (2004-12-21 17:49) [17]

2[13] Lamka   (21.12.04 17:22)
>Короче я делаю телефонный справочник и удовнее будет фильтровать по одной букве.
Удобнее чем что? У тебя есть 10000 абонентов. Ты ввел "А". Отфильтровалось 1000 фамилий. Ввел "Б". Осталось 200. Ввел "Р". Осталось 20. Почему бы сразу не фильтровать по "АБР". Ведь ежу понятно, что фильтр по "А" бессмысленен в 99% случаев (если только не все фамилии из 3 букв 8-). Т.е. ты дважды сделал бессмысленную работу.

Кроме того.
>table1.filter := "FieldName like " + chr(39) + trim(Edit.text) + "%" + chr(39);
FieldName - это поле у тебя так называется?
А так вообще отработает? С Like и %? Сомнительно. Вроде в хелпе написано

For example: State = "M*"


 
Sashok   (2004-12-21 18:02) [18]

Anatoly Podgoretsky ©  
Ошибка есть и вот она.


 
msguns ©   (2004-12-21 18:10) [19]

Кстати, а зачем обрезаешь пробелы-то, начальник ? Например, есть "ул.Героев", и есть "Проспект Героев" и "бул.Героев Сталинграда". Так вот я хочу фильтрануть по " Героев" или "Героев ". И что ты мене подсунешь оба раза - улицу ?


 
Lamka   (2004-12-22 15:42) [20]

msguns ©  
А какой способ предлогаешь ты


 
-=SS=- ©   (2004-12-22 15:52) [21]

Сначала присваеваешь потом фильтруешь
table1.filter := "FieldName like " + chr(39) + trim(Edit.text) + "%" + chr(39);
table1.filtered := true


 
Lamka   (2004-12-22 16:11) [22]

-=SS=- ©  
Всё равно ошибка "Filter expression incorrectly terminatea."
Может есть другой способ.


 
Соловьев ©   (2004-12-22 16:25) [23]

Может есть другой способ.

Есть и не один. Читай внимательно, то что тебе советуют.


 
-=SS=- ©   (2004-12-22 16:40) [24]

можно использовать AdoDataSet
Там есть commandText туда можно запихнуть sql скрипт для получения рекордсета ... этот же рекордсет будет и отображатся

например
 Select * from Table_Name where Table_Field = Like %param%


 
-=SS=- ©   (2004-12-22 16:40) [25]

можно использовать AdoDataSet
Там есть commandText туда можно запихнуть sql скрипт для получения рекордсета ... этот же рекордсет будет и отображатся

например
 Select * from Table_Name where Table_Field = Like %param%


 
msguns ©   (2004-12-22 16:44) [26]

>-=SS=- ©   (22.12.04 16:40) [25]

Ну он же ясно дал понять, что ничего, кроме TXXTable не приемлет. SQL не для Рыцарей Святого Ордена !


 
msguns ©   (2004-12-22 17:10) [27]

>Lamka   (22.12.04 15:42) [20]
>А какой способ предлогаешь ты

В [7] концепция

А конкретно делал бы так:
1. Возможность сортировки по любой колонке или перечню колонок
2. Фильры по "глобальным" объектам: улицы, АТС, etc (Но не фамилии и тем более номера телефонов)
3. Поиск по следующей схеме:

  а. Быстрый поиск "найти подобное": в первый раз для текущей колонки за образец берется значение поля текущей записи и ищется следующая, в следующие разы добавляется пункт (в дроп-даун меню, например) "искать следующую" и "искать предыдущую"

  б. Диалог поиска. Задается :
 - шаблон (или шаблоны по неск.полям, например ФИО и улица) и  опции поиска: частичное/полное совпадение, различать/не различать регистр, с текущего места/с начала таблицы. Старт поиска по кнопке. Сам поиск производится строго запросом (Query), ни какому визуалу не привязанному. Результат поиска (записи) переносятся в визуальный список в этой же форме поиска
в виде стриггрида с числом колонок=числу заданных для разных колонок шаблонов. Вверху списка показать строку "Запись № из MMM найденных" При перемещении юзера по списку корректить строку заголовка и локэйтиться в основной таблице по ID (ID, ессно, брать из того же Query при "закачке" найденных строк в дин.массив, откуда потом заполняется стрингрид). Т.е. юзеру показываются в отдельном окошке все записи, удовлетворяющие заданным им условиям и дана возможность смотреть соответствующие им строчки тел.справочника, просто перемещаясь по списку. Уверяю, что это очень удобно.
Чтобы последовательность найденных записей совпадала с порядком следования их в осн.таблице (а иначе работать со списком будет неудобно), надо при формировании поиского запроса копировать ORDER BY запроса, с которого отображается осн.таблица.
Для закрытия окна еще одна кнопулька. Окно поиска модальное.
 - маска контекста. Один эдит и комбобокс со списком полей справочника. Узер через комбобокс выбирает колонку и вводит значение в едит. По изменению значения в эдите в осн.таблице выполняется метод Locate для выбранного поля с соотв.опциями.
(Железно работает только на стринговых полях, но в справочнике, по идее, другие отображаться не должны)


 
Lamka   (2004-12-22 18:18) [28]

msguns ©  
Можно с примером.


 
msguns ©   (2004-12-22 18:51) [29]

Какой я тебе дам пример ? Просто юнит, в котором 400 строк ? Дак ведь есть еще создание этой формы и ее вызов из других форм.
Но если хочешь, намыль мне (ящик в анкете), а тебе замылю zip со всем проектом (кроме баз данных, конечно, они здоровые)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.035 c
3-1103765055
Vader
2004-12-23 04:24
2005.01.30
ADO и dbExpress использование для локальных БД


14-1105379317
Progh
2005-01-10 20:48
2005.01.30
Прога для сетевого контроля моего компьютера


1-1105612228
TankMan
2005-01-13 13:30
2005.01.30
Не понимаю в чем ошибка на аsm-е


1-1105885062
Piter
2005-01-16 17:17
2005.01.30
Что означают параметры в директивах


14-1105687741
Ihor Osov'yak
2005-01-14 10:29
2005.01.30
Нужен совет о комплектации системы (сpu, monitor)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский