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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобраться с фильтром в QSqlRelationalTableModel[Solved]  (Прочитано 2838 раз)
paran87
Гость
« : Ноябрь 07, 2010, 11:26 »

База данных Mysql. ОС - Ubuntu.
Таблица для вывода  QTableView
Добрый вам день коллеги. При написании простенькой программы возникла проблема работы с фильтром. Расмотрим кусок базы данных который нас интересует и для этого упрощу БД до двух таблиц. 1- справочник(id и фамилия), 2 - состоит из 3х полей - 1)id_phone(PK) 2)id_friends(FK) 3)Телефон(varchar).
Обновлять 2ю таблицу приходиться часто и для этого я написал свой слотик в котором идет задие основных парметров. В конструкторе ничего кроме connectov не задавл.

void phone::filing()
{
     relationModel = new QSqlRelationalTableModel;
     relationModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
     relationModel->setTable("phone");
(?)           relationModel->setRelation(1, QSqlRelation("friends", "id_friends", "surname"));
     relationModel->setHeaderData(1, Qt::Horizontal, QObject::trUtf8("Фамилия"));
     relationModel->setHeaderData(2, Qt::Horizontal, QObject::trUtf8("Телефон"));
     relationModel->select();
  //Тут просто делается выподающий список место второго id(FK). Стандартная штука.
    QSqlRelationalDelegate * delegate = new QSqlRelationalDelegate;
    ui->tableView->setModel(relationModel);
    ui->tableView->setItemDelegate(delegate);
    ui->tableView->setColumnHidden(0, true);
}
Слот не дописан и по этому ограничимся тем, что не получается. Я не буду брать текс который приходит в слот, а просто напишу запрос с жесткими параметрами. Я хочу что бы мой филтр нашел все фамилии в которых присутствует буква в
Для фильтрации использую следующий слотик
void phone::setFilterTel(const QString &text)
{
           relationModel->setFilter("id_friends in "
                                 "(select id_friends from friends where surname like \"%В%\")");
}
В данном случае, при выполнении фильтра получаю пусто!
Если я коментирую строку которую обозначил (?), то запрос дает результаты, но место имен я получаю id(FK).
Как мне сделать так, что бы работал и запрос и были имена вместа id?
« Последнее редактирование: Ноябрь 11, 2010, 13:30 от paran87 » Записан
kowsan
Гость
« Ответ #1 : Ноябрь 10, 2010, 14:33 »

qsortfilterproxymodel
Записан
paran87
Гость
« Ответ #2 : Ноябрь 10, 2010, 16:30 »

Ну пользоваться разными моделями не очень хочется! Потом фиг разберешься, что написал. Хотелось бы понят
1) Где я накасячил(если это конечно я)
2) Почему не работает и как допилить!!!
Записан
asvil
Гость
« Ответ #3 : Ноябрь 10, 2010, 17:35 »

Возможно в фильтре необходимо указывать имена таблиц. Например:
Код:
phone.id_friends in (select friends.id_friends from friends where surname like \"%В%\")
Ну и конечно же и Вам я посоветую читать и читать ассистента. Но не просто читать, а читать на предмет того, как Qt оповещает программиста об ошибках. Qt не использует исключений на выход. Она просто периодически в интерфейсы вставляет lastError или errorString, ну или еще что-нибудь. А вы уже должны во время возникновения вопросов моментально нагородить в своей программе qDebug() << *.lastError().text(); qDebug() << Q_FUNC_INFO. Хотя вывод макроса Q_FUNC_INFO почему-то не содержит номера строки.
« Последнее редактирование: Ноябрь 10, 2010, 17:41 от Филоненко Михаил » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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