Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Фильтрация данных в TZDataSet с помощью Filter |
Автор: youriy86 29.3.2011, 13:24 | ||
Всем привет! У меня следующая проблема: Использую ZEOS + MySQL. Хочу выводить записи соответствующие некоторому условию (делаю поиск). Устанавливаю в поле Filter следующее значение:
Отображаются все нужные мне записи и еще те записи, у которых длина = 1. Подскажите плиз, в чем особенность оператора '*' и как его правильно использовать для фильтра, либо какой другой? Как ни странно, но % не работает - вообще ничего не выдает. |
Автор: Antimol 29.3.2011, 17:15 | ||
А там разве вместо звездочек не знак % нужно ставить?
|
Автор: youriy86 30.3.2011, 08:11 |
Со знаком "%" вообще записи не отображаются! Добавлено через 2 минуты и 2 секунды Кстати думал, что у меня возможно старая версия, обновил ZEOS до 6.6.6 stable. Tа же проблема... |
Автор: youriy86 30.3.2011, 09:26 |
Bообще мне нужно сделать быстрый поиск. Человек вводит букву в TEdit и на его OnChange должны фильтроваться данные в TDBGridEh. K гриду привязан TZDataSet. Я подумал, что логично установить фильтр в самом датасэте. B примерах использование LIKE не показано. Залез в исходники TZDataSet, добрался до парсера, увидел LIKE в списке токенов и решил попробовать. Искал в нете, такой же вопрос задавали несколько человек, но внятного ответа так и не получили... |
Автор: Akella 30.3.2011, 09:29 | ||
![]() Программист не может отличить поиск и фильтрацию. Может тебе ещё пояснить, что такое сортировка? Вначале нужно определиться, что ДЛЯ тебя или для твоих пользователей означает слово "поиск". Потому как обычному пользователю, да и программистам бывает пофиг, что поиск, что фильтрация. Если нужен поиск, то смотри в сторону locate и похожих команд. Давай рассказывай, что же всё-таки тебе или твоим пользователям нужно. Поиск или фильтрация. Тебе нужно просто отсечь ненужные записи и показать только те, которые удовлетворяют некоему условию? Да, это фильтрация. Почему ты не хочешь использовать SQL? Добавлено @ 09:34 ![]() ![]() Добавлено @ 09:35
Книги читать уже не модно и документацию читать религия не позволяет. Правильно, зачем читать? Я щас закину на несколько форумов свой вопрос, попью чайку и мне всё по быстренькому сделают. Ну-ну ![]() |
Автор: youriy86 30.3.2011, 09:35 |
Я планировал так: Пользователь вводит букву и в гриде остаются только те записи в названии которых есть эта буква и т.д., то есть это фильтрация... |
Автор: Akella 30.3.2011, 09:36 | ||
да, я уже ответил и дал совет на счет SQL ![]() Добавлено через 1 минуту и 8 секунд
Потому что это азЫ! Об этом пишут в любой книжке типа "Базы данных для чайнегов" ![]() |
Автор: youriy86 30.3.2011, 09:38 | ||||
Bообще насчет чая и всего остального ты не прав, я вообще не хотел писать что-то на форуме из-за такого отношения... Посмотри мое количество сообщений, и думаю ты поймешь как часто я "пью чай" Добавлено через 1 минуту и 8 секунд A зачем мне использовать еще один SQL запрос? Объясни мне! Когда у меня уже выдраны все необходимые записи. Зачем мне еще раз выполнять запрос, я хочу локально отфильтровать их Добавлено через 3 минуты и 41 секунду
Если бы я знал ответ на вопрос, я бы его не задавал. Я и есть чайник, и раздел этот для чайников... |
Автор: Vas 30.3.2011, 09:55 | ||
Ну пусть вводит, а потом тыркает применить, тогда и формируй новый SQL запрос и отображай. Зачем сразу все записи показывать? Если их миллионов пять, будешь тащить все, а потом фильтровать локально, имхо бред. |
Автор: youriy86 30.3.2011, 10:09 |
Пользователю отображаются входящие документы на подпись, их может быть штук 100 (например служебки, распоряжения и т.д.). Он должен видеть их все сразу, но допустим, какой-то из них срочный, ему звонят по телефону и говорят, документ такой-то срочно подписать, вот тут удобно воспользоваться поиском. |
Автор: youriy86 30.3.2011, 11:07 |
Вообщем, как я и ожидал, нафлудили а результата никакого. Полазил по официальному сайту ZEOS. Там на форуме уже поднимался мой вопрос с использованием like и *. Конструкция, использованная мною правильная. Пользователь, поднявший такой же вопрос на форуме, заметил, что в модуле ZMatchPattern.pas ошибка в логике функции MatchAfterStar. И именно поэтому выдаются помимо правильных результатов, еще и записи с длиной 1. Пользователь посоветовал скачать оригинальный код модуля, написанный Kevin Boylan совместно с Sergey Seroukhov... Вот ссылка: http://zeos.firmos.at/viewtopic.php?t=1763&highlight=filter |
Автор: superVad 30.3.2011, 12:04 |
В событии onFilterRecord фильтруй все сам руками. Мне так даже проще, чем формировать строки. |
Автор: Vas 30.3.2011, 12:06 | ||
Боюсь, что если бы не флудили, ты бы сидел и ждал ответа, а не лазил на иностранные форумы
Ну качай и пробуй. |
Автор: Akella 30.3.2011, 12:09 |
вот я тебя и спросил: покажи в документации или в примерах информацию про локальный фильтр, где используется LIKE Добавлено через 32 секунды Если ты вообще конечно читал ![]() Добавлено через 1 минуту и 48 секунд Этот раздел для всех, а не для чайников. А чайник в первую очередь должен быть читателем, а не писателем. Добавлено через 8 минут и 3 секунды ![]() |
Автор: Frees 30.3.2011, 12:33 | ||
когда фильтруется по мере ввода - это удобнее. Filter - будет предпочтительнее, если записей не миллионы а сотни,можно сделать что они все забираются 1 раз, а потом только фильтруются, нагрузка на сервер меньше. |
Автор: youriy86 30.3.2011, 16:14 | ||||||
Tы абсолютно прав.
Cлушай, вот что ты ко мне придрался, ты "великий ГУPУ", а про * не знал и почему она так работает. Я взял и прочел... Добавлено через 1 минуту и 22 секунды
Я именно так и хотел сделать, но Filter в ZEOS не доведен до ума, поэтому и консультируюсь у Вас... |
Автор: Akella 31.3.2011, 09:00 | ||
знал Это очень здорово ![]() Но ты так и не ответил на мою просьбу :( Добавлено через 1 минуту и 11 секунд Ты так считаешь, потому что like не хочет работать? Или почему? Добавлено через 5 минут и 24 секунды Я просто посмотрел стандартную справку по TDataSet.Filter и не нашёл там ни единого упоминания о возможности использования LIKE. Поэтому я тебе и просил показать рабочий пример или цитату из справки по ZeosDBO, где бы упоминалось о LIKE. Всего-то. |
Автор: superVad 31.3.2011, 10:35 |
Что - никак не подходит? |