Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтрация данных в TZDataSet с помощью Filter, Проблема с установкой фильтра 
:(
    Опции темы
youriy86
Дата 29.3.2011, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Всем привет!
У меня следующая проблема: Использую ZEOS + MySQL. Хочу выводить записи соответствующие некоторому условию (делаю поиск). Устанавливаю в поле Filter следующее значение:
Код

  TZQuery1.Filter := 'doc_title like ''*' + edtSearch.Text + '*''';


Отображаются все нужные мне записи и еще те записи, у которых длина = 1.
Подскажите плиз, в чем особенность оператора '*' и как его правильно использовать для фильтра, либо какой другой? Как ни странно, но % не работает - вообще ничего не выдает.
PM MAIL   Вверх
Antimol
Дата 29.3.2011, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

Репутация: 4
Всего: 4



А там разве вместо звездочек не знак % нужно ставить?

Код

 TZQuery1.Filter := 'doc_title like ''%' + edtSearch.Text + '%''';

--------------------
Лучшее спасибо это "+" к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи....
PM MAIL WWW ICQ   Вверх
youriy86
Дата 30.3.2011, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Со знаком "%" вообще записи не отображаются!

Добавлено через 2 минуты и 2 секунды
Кстати думал, что у меня возможно старая версия, обновил ZEOS до 6.6.6 stable. Tа же проблема...
PM MAIL   Вверх
Akella
Дата 30.3.2011, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(youriy86 @  29.3.2011,  13:24 Найти цитируемый пост)
TZQuery1.Filter := 'doc_title like ''*' + edtSearch.Text + '*''';

А что, в документации и в примерах именно так показано?

Добавлено через 2 минуты и 27 секунд
Покажи пример или приведи цитату из документации, где используется локальная фильтрация с помощью like
PM MAIL   Вверх
youriy86
Дата 30.3.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Bообще мне нужно сделать быстрый поиск. Человек вводит букву в TEdit и на его OnChange должны фильтроваться данные в TDBGridEh. K гриду привязан TZDataSet. Я подумал, что логично установить фильтр в самом датасэте. B примерах использование LIKE не показано. Залез в исходники TZDataSet, добрался до парсера, увидел LIKE в списке токенов и решил попробовать. Искал в нете, такой же вопрос задавали несколько человек, но внятного ответа так и не получили...

Это сообщение отредактировал(а) youriy86 - 30.3.2011, 09:28
PM MAIL   Вверх
Akella
Дата 30.3.2011, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(youriy86 @  30.3.2011,  09:26 Найти цитируемый пост)
Bообще мне нужно сделать быстрый поиск. 

 smile круто
Программист не может отличить поиск и фильтрацию. Может тебе ещё пояснить, что такое сортировка?


Вначале нужно определиться, что ДЛЯ тебя или для твоих пользователей означает слово "поиск". Потому как обычному пользователю, да и программистам бывает пофиг, что поиск, что фильтрация. 
Если нужен поиск, то смотри в сторону locate и похожих команд.

Цитата(youriy86 @  30.3.2011,  09:26 Найти цитируемый пост)
сделать быстрый поиск.


Цитата(youriy86 @  30.3.2011,  09:26 Найти цитируемый пост)
фильтроваться данные


Давай рассказывай, что же всё-таки тебе или твоим пользователям нужно. Поиск или фильтрация.


Тебе нужно просто отсечь ненужные записи и показать только те, которые удовлетворяют некоему условию? Да, это фильтрация.
Почему ты не хочешь использовать SQL?

Добавлено @ 09:34
Цитата(youriy86 @  30.3.2011,  09:26 Найти цитируемый пост)
B примерах использование LIKE не показано.

 smile Ага, сам придумал. smile

Добавлено @ 09:35
Цитата(youriy86 @  30.3.2011,  09:26 Найти цитируемый пост)
Залез в исходники TZDataSet, добрался до парсера, увидел LIKE в списке токенов и решил попробовать.

Книги читать уже не модно и документацию читать религия не позволяет. Правильно, зачем читать? Я щас закину на несколько форумов свой вопрос, попью чайку и мне всё по быстренькому сделают. Ну-ну smile
PM MAIL   Вверх
youriy86
Дата 30.3.2011, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Я планировал так:
  Пользователь вводит букву и в гриде остаются только те записи в названии которых есть эта буква и т.д., то есть это фильтрация...
PM MAIL   Вверх
Akella
Дата 30.3.2011, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



да, я уже ответил и дал совет  на счет SQL smile

Добавлено через 1 минуту и 8 секунд
Цитата(youriy86 @  30.3.2011,  09:26 Найти цитируемый пост)
Искал в нете, такой же вопрос задавали несколько человек, но внятного ответа так и не получили...

Потому что это азЫ! Об этом пишут в любой книжке типа "Базы данных для чайнегов"  smile 
PM MAIL   Вверх
youriy86
Дата 30.3.2011, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Bообще насчет чая и всего остального ты не прав, я вообще не хотел писать что-то на форуме из-за такого отношения... Посмотри мое количество сообщений, и думаю ты поймешь как часто я "пью чай"

Добавлено через 1 минуту и 8 секунд
A зачем мне использовать еще один SQL запрос? Объясни мне! Когда у меня уже выдраны все необходимые записи. Зачем мне еще раз выполнять запрос, я хочу локально отфильтровать их

Добавлено через 3 минуты и 41 секунду
Цитата(Akella @ 30.3.2011,  09:36)
да, я уже ответил и дал совет  на счет SQL smile

Добавлено @ 09:37
Цитата(youriy86 @  30.3.2011,  09:26 Найти цитируемый пост)
Искал в нете, такой же вопрос задавали несколько человек, но внятного ответа так и не получили...

Потому что это азЫ! Об этом пишут в любой книжке типа "Базы данных для чайнегов"  smile

Если бы я знал ответ на вопрос, я бы его не задавал. Я и есть чайник, и раздел этот для чайников...
PM MAIL   Вверх
Vas
Дата 30.3.2011, 09:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(youriy86 @  30.3.2011,  09:35 Найти цитируемый пост)
Пользователь вводит букву и в гриде остаются только те записи в названии которых есть эта буква и т.д., то есть это фильтрация... 

Ну пусть вводит, а потом тыркает применить, тогда и формируй новый SQL запрос и отображай. 
Зачем сразу все записи показывать? Если их миллионов пять, будешь тащить все, а потом фильтровать локально, имхо бред.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
youriy86
Дата 30.3.2011, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Пользователю отображаются входящие документы на подпись, их может быть штук 100 (например служебки, распоряжения и т.д.). Он должен видеть их все сразу, но допустим, какой-то из них срочный, ему звонят по телефону и говорят, документ такой-то срочно подписать, вот тут удобно воспользоваться поиском.
PM MAIL   Вверх
youriy86
Дата 30.3.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Вообщем, как я и ожидал, нафлудили а результата никакого.
Полазил по официальному сайту ZEOS. Там на форуме уже поднимался мой вопрос с использованием like и *. Конструкция, использованная мною правильная. Пользователь, поднявший такой же вопрос на форуме, заметил, что в модуле ZMatchPattern.pas ошибка в логике функции MatchAfterStar. И именно поэтому выдаются помимо правильных результатов, еще и записи с длиной 1. Пользователь посоветовал скачать оригинальный код модуля, написанный Kevin Boylan совместно с Sergey Seroukhov...

Вот ссылка: http://zeos.firmos.at/viewtopic.php?t=1763...ighlight=filter
PM MAIL   Вверх
superVad
Дата 30.3.2011, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



В событии onFilterRecord фильтруй все сам руками.
Мне так даже проще, чем формировать строки.

Это сообщение отредактировал(а) superVad - 30.3.2011, 12:08
PM MAIL   Вверх
Vas
Дата 30.3.2011, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(youriy86 @  30.3.2011,  11:07 Найти цитируемый пост)
Вообщем, как я и ожидал, нафлудили а результата никакого.

Боюсь, что если бы не флудили, ты бы сидел и ждал ответа, а не лазил на иностранные форумы  

Цитата(youriy86 @  30.3.2011,  11:07 Найти цитируемый пост)
Пользователь посоветовал скачать оригинальный код модуля, написанный Kevin Boylan совместно с Sergey Seroukhov...

Ну качай и пробуй.

Это сообщение отредактировал(а) Vas - 30.3.2011, 12:07


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Akella
Дата 30.3.2011, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(youriy86 @  30.3.2011,  09:38 Найти цитируемый пост)
я хочу локально отфильтровать их

вот я тебя и спросил: покажи в документации или в примерах информацию про локальный фильтр, где используется LIKE

Добавлено через 32 секунды
Если ты вообще конечно читал  smile  или ты не читатель, а только писатель?

Добавлено через 1 минуту и 48 секунд
Цитата(youriy86 @  30.3.2011,  09:38 Найти цитируемый пост)
, и раздел этот для чайников... 

Этот раздел для всех, а не для чайников. А чайник в первую очередь должен быть читателем, а не писателем.

Добавлено через 8 минут и 3 секунды
Цитата(Akella @  30.3.2011,  09:29 Найти цитируемый пост)
Почему ты не хочешь использовать SQL?

Цитата(Akella @  30.3.2011,  09:36 Найти цитируемый пост)
да, я уже ответил и дал совет  на счет SQL smile

Цитата(Vas @  30.3.2011,  09:55 Найти цитируемый пост)
формируй новый SQL запрос и отображай. 

 smile 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1191 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.