Варианты реализации запросов с шаблонами.

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Шмель
Сообщения: 17
Зарегистрирован: 11 май 2006, 20:48

Варианты реализации запросов с шаблонами.

Сообщение Шмель » 20 ноя 2006, 12:52

Здравствуйте. Помогите советом новичку.
Есть база с данными по материальным ценностям. Требуется реализовать удобный фильтр по различным критериям. Из-за не имения опыта выбрал связку IBDataSet->DataSourc->DBGrid. В этом случае я увидел 2 варианта реализации запросов по шаблону:
Вариант 1. Запрос у сервера. Использовать в запросе конструкцию "Select ... Where Field LIKE '%xxx1%' [AND Field LIKE '%xxx2%']". Работает замечательно, кроме одного "но" - запрос однозначно указывает на регистр запрашиваемой строчки 'xxx'.
Вариант 2. Локальная фильтрация. Из полностью запрошенной базы показываются только те записи, которые удовлетворяют условию. Констуируем условие с потерей зависимости от регистра, типа -
Вхождение(ВерхнРегистр(строка_запроса), ВерхнРегистр(очередная_запись)). Но этот вариант не устраивает тем, что при пробегании по отфильтрованным записям, бегунок полосы прокрутки соответсвует положению записи относительно всей базы (с невидимыми записями), и перемещается не равномерно.
Ни с первым, ни со вторым вариантом соглашаться не хочется. Посоветйте, пожалуйста, какие есть еще варианты. И много ли нужно будет переделывать?. Спасибо.

PS: Слышал, что для плавной прокрутки отфильтрованной части можно поиграться с индексами. Но пока не представляю этого.

sydenis
Сообщения: 64
Зарегистрирован: 22 фев 2005, 16:09

Сообщение sydenis » 20 ноя 2006, 14:57

на вкус и цвет, конечно, нет товарищей, но всё-таки наверно перегонять на клиента всю таблицу - не самый правильный вариант...
А проблема с регистром в 1м варианте решается использованием upper (или low - в fb2.0)

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 ноя 2006, 15:52

В случае именно вхождения подстроки (не конкретно с начала или с конца) без учёта регистра - RTFM CONTAINING

Шмель
Сообщения: 17
Зарегистрирован: 11 май 2006, 20:48

Сообщение Шмель » 22 ноя 2006, 06:41

Мужики, реальное человеческое спасибо! :D
Реализовал полностью первый вариант - все прекрасно работает, даже просто летает - никакой локальной фильтрации в DataSet, фильтрует сервер.

sydenis
Upper работает и при FireBird 1.5 (мой случай)

WildSery
Спасибо за еще один вариант. Буду иметь ввиду.

Всем всех благ!

Шмель
Сообщения: 17
Зарегистрирован: 11 май 2006, 20:48

Сообщение Шмель » 27 ноя 2006, 09:06

Эх, еще один вопрос появился, близкий к исходной теме.
Каким образом можно реализовать сортировку по алфавиту без учета регистра? Т.е. после обычной сортировки получаем:
----------
Алфавит
Бука
Веди
алгоритм
букинист
----------
А хотелось бы получить:
----------
алгоритм
Алфавит
Бука
букинист
Веди
----------
Возможно ли такое выполнить с помощью одного SQL запроса, или только через Хранимые Процедуры и т.п.
Спасибо.

PS: Если немного схитрить, то можно при вводе новых записей принудительно менять первую букву на "заглавную". Но все-таки, можно ли отсортировать по предложенному выше варианту?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 ноя 2006, 09:51

http://www.ibase.ru/devinfo/ibrusfaq.htm

кроме того, читать про collate вообще, в т.ч. про Collate Kit.

Ответить