Russian Qt Forum
Сентябрь 30, 2024, 08:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSQLITE, QSqlTableModel, setFilter(). select bla-bla LIKE  (Прочитано 9496 раз)
smartchecker
Гость
« : Декабрь 08, 2009, 17:59 »

Как сделать setFilter'у объяснить что хочу запрос типа select LIKE, а не select =
Записан
MoPDoBoPoT
Гость
« Ответ #1 : Декабрь 08, 2009, 21:23 »

Непонятно, в чем собственно вопрос? Пишите в setFilter() условие LIKE, и все Улыбающийся
Код
C++ (Qt)
model->setFilter("name LIKE 'Petrov %'");
 
Записан
smartchecker
Гость
« Ответ #2 : Декабрь 09, 2009, 01:01 »

А как чтобы регистронезависимо?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Декабрь 09, 2009, 07:15 »

Код
C++ (Qt)
model->setFilter("UPPER(name) LIKE UPPR('Petrov %'"))
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
smartchecker
Гость
« Ответ #4 : Декабрь 09, 2009, 12:07 »

Код
C++ (Qt)
model->setFilter("UPPER(name) LIKE UPPR('Petrov %'"))
Не работает. SQLITE умеет такие конструкции?
Пытался скормить sqlbrowser'у из demos'ов - возвращает пустую таблицу.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Декабрь 09, 2009, 12:46 »

Код
C++ (Qt)
model->setFilter("UPPER(name) LIKE UPPER('Petrov%'"))
Опечатался. Вот из документации SQLite:
Цитировать
upper(X)    Return a copy of input string X converted to all upper-case letters. The implementation of this function uses the C library routine toupper() which means it may not work correctly on non-ASCII UTF-8 strings.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
smartchecker
Гость
« Ответ #6 : Декабрь 09, 2009, 13:17 »

Код
C++ (Qt)
model->setFilter("UPPER(name) LIKE UPPER('Petrov%'"))
Опечатался. Вот из документации SQLite:
Цитировать
upper(X)    Return a copy of input string X converted to all upper-case letters. The implementation of this function uses the C library routine toupper() which means it may not work correctly on non-ASCII UTF-8 strings.
Насчёт опечатки я понял. И мануал прочитал.
В таблице строки в utf-8
в sqlbrowser'е пишу
Код
SQL
SELECT * FROM qweqwe WHERE upper(field1) LIKE upper('%фыв%')
результат - пустая таблица
Записан
MoPDoBoPoT
Гость
« Ответ #7 : Декабрь 09, 2009, 15:35 »

1. Запрос действительно возвращает путстую таблицу.
2. Дело в различных кодировках программы и СУБД.
Записан
smartchecker
Гость
« Ответ #8 : Декабрь 09, 2009, 16:27 »

1. Запрос действительно возвращает путстую таблицу.
2. Дело в различных кодировках программы и СУБД.
Тогда почему, если upper() не использовать, и передавать строку с учётом регистра, всё работает как надо?
Записан
MoPDoBoPoT
Гость
« Ответ #9 : Декабрь 09, 2009, 17:13 »

Я имелл ввиду ИЛИ (или 1 пункт, или 2). Проверил сам - запрос возвратит пустую строку, в случае отсутствия шаблона '%фыв%', т.е. регистр учитывается.
Почему? - потому что функция upper() не работате с русскоязычными символами (можешь сам убедится). Это, наверное, связано с "...not work correctly on non-ASCII UTF-8 strings."
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.241 секунд. Запросов: 23.