crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QSqlRelationalTableModel, как подружить setRelation и setFilter?
grio
  опции профиля:
сообщение 16.1.2010, 15:27
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


 model_user = new QSqlRelationalTableModel;
model_user->setTable("users");
model_user->setFilter("Name LIKE '%"+ui->lineEdit_search->text()+"%'");
model_user->setRelation(13, QSqlRelation("users", "UID", "Name"));
model_user->select();
...


Делаю форму поиска пользователей, в которой один пользователь может ссылаться на другого.
Но если использую одновременно setRelation и setFilter то результат - пустая таблица.
Как можно выйти из положения?
У меня нет задачи редактировать таблицу, нужно лишь отображать данные.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
MoPDoBoPoT
  опции профиля:
сообщение 16.1.2010, 18:06
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Странно. Может запрос (без реляции) возвращает пустую таблицу? Или может в описании таблицы БД у не указано то, что поле с номером 13 (не знаю какое название) таблицы users является внешним ключом, ссылающимся на поле UID этой же таблицы?

Ну а вообще, только для чтения можно воспользоваться классом QSqlQueryModel:
...
model_user = new QSqlQueryModel(this);
//готовим запрос
QSqlQuery q;
query.prepare("SELECT * FROM users WHERE name LIKE '%' || :name || '%' ");
query.bindValue(":name", ui->lineEdit_search->text());
query.exec();
//устанавливаем данные в модель
model_user->setQuery(q);
...

|| - операция конкатенации строк в Oracle
В setQuery можно было бы сразу записать текст запроса, но с подготовленным (prepared) запросом имеем более оптимизированное решение (если конечно СУБД поддерживает это).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 14:33