![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фильтрация в DBGrid [D7]
Lamka © (2004-12-20 17:31:00)Доброго времени суток уважаемые мастера. У меня проблема мне нужно отфильтровать текст в DBgrid я использую этот код
table1.filtered := true
table1.filter := 'FieldName like ' + chr(39) + trim(Edit.text) + '%' + chr(39);
Но при наборе текста в Edit Delphi выдаёт ошибку.В чём дело?
msguns (2004-12-22 18:51:00) [1]Какой я тебе дам пример ? Просто юнит, в котором 400 строк ? Дак ведь есть еще создание этой формы и ее вызов из других форм.
Но если хочешь, намыль мне (ящик в анкете), а тебе замылю zip со всем проектом (кроме баз данных, конечно, они здоровые)
Lamka (2004-12-22 18:18:00) [2]msguns ©
Можно с примером.
msguns (2004-12-22 17:10:00) [3]>Lamka (22.12.04 15:42) [20]
>А какой способ предлогаешь ты
В [7] концепция
А конкретно делал бы так:
1. Возможность сортировки по любой колонке или перечню колонок
2. Фильры по "глобальным" объектам: улицы, АТС, etc (Но не фамилии и тем более номера телефонов)
3. Поиск по следующей схеме:
а. Быстрый поиск "найти подобное": в первый раз для текущей колонки за образец берется значение поля текущей записи и ищется следующая, в следующие разы добавляется пункт (в дроп-даун меню, например) "искать следующую" и "искать предыдущую"
б. Диалог поиска. Задается :
- шаблон (или шаблоны по неск.полям, например ФИО и улица) и опции поиска: частичное/полное совпадение, различать/не различать регистр, с текущего места/с начала таблицы. Старт поиска по кнопке. Сам поиск производится строго запросом (Query), ни какому визуалу не привязанному. Результат поиска (записи) переносятся в визуальный список в этой же форме поиска
в виде стриггрида с числом колонок=числу заданных для разных колонок шаблонов. Вверху списка показать строку "Запись № из MMM найденных" При перемещении юзера по списку корректить строку заголовка и локэйтиться в основной таблице по ID (ID, ессно, брать из того же Query при "закачке" найденных строк в дин.массив, откуда потом заполняется стрингрид). Т.е. юзеру показываются в отдельном окошке все записи, удовлетворяющие заданным им условиям и дана возможность смотреть соответствующие им строчки тел.справочника, просто перемещаясь по списку. Уверяю, что это оченьудобно.
Чтобы последовательность найденных записей совпадала с порядком следования их в осн.таблице (а иначе работать со списком будет неудобно), надо при формировании поиского запроса копировать ORDER BY запроса, с которого отображается осн.таблица.
Для закрытия окна еще одна кнопулька. Окно поиска модальное.
- маска контекста. Один эдит и комбобокс со списком полей справочника. Узер через комбобокс выбирает колонку и вводит значение в едит. По изменению значения в эдите в осн.таблице выполняется метод Locate для выбранного поля с соотв.опциями.
(Железно работает только на стринговых полях, но в справочнике, по идее, другие отображаться не должны)
msguns (2004-12-22 16:44:00) [4]>-=SS=- © (22.12.04 16:40) [25]
Ну он же ясно дал понять, что ничего, кроме TXXTable не приемлет. SQL не для Рыцарей Святого Ордена !
-=SS=- (2004-12-22 16:40:00) [5]можно использовать AdoDataSet
Там есть commandText туда можно запихнуть sql скрипт для получения рекордсета ... этот же рекордсет будет и отображатся
например
Select * from Table_Name where Table_Field = Like %param%
-=SS=- (2004-12-22 16:40:00) [6]можно использовать AdoDataSet
Там есть commandText туда можно запихнуть sql скрипт для получения рекордсета ... этот же рекордсет будет и отображатся
например
Select * from Table_Name where Table_Field = Like %param%
Соловьев (2004-12-22 16:25:00) [7]Может есть другой способ.
Есть и не один. Читай внимательно, то что тебе советуют.
Lamka (2004-12-22 16:11:00) [8]-=SS=- ©
Всё равно ошибка "Filter expression incorrectly terminatea."
Может есть другой способ.
-=SS=- (2004-12-22 15:52:00) [9]Сначала присваеваешь потом фильтруешь
table1.filter := 'FieldName like ' + chr(39) + trim(Edit.text) + '%' + chr(39);
table1.filtered := true
Lamka (2004-12-22 15:42:00) [10]msguns ©
А какой способ предлогаешь ты
msguns (2004-12-21 18:10:00) [11]Кстати, а зачем обрезаешь пробелы-то, начальник ? Например, есть "ул.Героев", и есть "Проспект Героев" и "бул.Героев Сталинграда". Так вот я хочу фильтрануть по " Героев" или "Героев ". И что ты мене подсунешь оба раза - улицу ?
Sashok (2004-12-21 18:02:00) [12]Anatoly Podgoretsky ©
Ошибка есть и вот она.
Sergey13 (2004-12-21 17:49:00) [13]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*'
msguns (2004-12-21 17:42:00) [14]Кстати, недавно видел подобное "творение". Показывает все телефоны города в порядке возрастания номеров, посортировать нельзя - вето, видимо. Есть, ясен красень, поиск. Крут, как пасхальное яйцо-чемпион. Но беда в том, что я не знаю, как он написал в этой свой базе улицу: то ли "Веревки", то ли Григория Веревки. То ли ул.Веревки, то ли ул.Г.Веревки, то ли пер.Веревки.
Короче, сколько я ни набирал - ни фига не получил.
Залез в папку с прогой, глянул - ага ! эмдебе, ясненько. Открываю "любимый до слез" аксез. Даю запрос с сортировкой по улице и с предикатом %ВЕРЕВК%. Через полсекунды получаю список из 30-40 строк, где наблюдаю, что огурец позаводил енту улицу и как "Григория Веревки", и как "Гр.Веревки", и как "Г.ВЕРЕВКИ" и еще много как. Номер я, конечно, нашел (надо было по дому и квартире), но получил при этом один вопрос "а на хрена мне, собственно, эта прога ?" Если я из акцеса найду все, что надо куда быстрее и с меньшими нервными потерями, а ?
Ты, случаем, не подобный шедевр ваяешь ?
Соловьев (2004-12-21 17:31:00) [15]TTable.FindNearest + F1 , смотри Examle
msguns (2004-12-21 17:30:00) [16]>Sashok (21.12.04 17:21) [12]
>Короче я делаю телефонный справочник и удовнее будет фильтровать по одной букве.
Да хоть список членов клуба кастратов ! Какая разница ???
На фига обязательно фильтровать?
Да замени ты этот долбанный Table на Query и по событию OnChange в эдите, где узер вводит этот твой номер, перестраивай запрос и переоткрывай его !
Но я бы такой справочник не юзал бы ни за какие ковриги.
Ты можешь сделать отображение найденных в отдельном окне (или листвьюхе, например) с локэйтом номера в основном списке по клику на нем ? Ведь это куда удобнее. Кроме того, ну объясни мне, тупому невежде, никогда не пользовавшемуся телефоном, ну на кой мне все телефоны на цифру "2", а ? Меня же интересует конкретныйномер, и пока я его наберу, твое чудо чудесное раз 6-7 (а если я еще буду исправлять ошибки, то и все 10) раз будет моргать с жуткими тормозами ! Я уж молчу о наборе фамилий ;(( или адресов ;(((
Lamka (2004-12-21 17:22:00) [17]Sergey13 ©
Короче я делаю телефонный справочник и удовнее будет фильтровать по одной букве.
Sashok (2004-12-21 17:21:00) [18]Sergey13 ©
Короче я делаю телефонный справочник и удовнее будет фильтровать по одной букве.
Sergey13 (2004-12-21 17:15:00) [19]2[9] Lamka (21.12.04 16:45)
>[7] msguns © (21.12.04 13:19)
>А вот контекстная фильтрация (опять же ИМХО) - на фиг не нужна - только >тормозить будет, да и смысла лишена.
[9] Lamka (21.12.04 16:45)
>msguns ©
>Мне нужна контекстная фильтрация.
8-). А зачем? Сможешь объяснить?
Lamka (2004-12-21 17:05:00) [20]Соловьев ©
Вот тебе ошивка: Filter expression incorrectly terminatea.