Russian Qt Forum

Qt => Базы данных => Тема начата: paran87 от Ноябрь 07, 2010, 11:26



Название: Помогите разобраться с фильтром в QSqlRelationalTableModel[Solved]
Отправлено: 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?


Название: Re: Помогите разобраться с фильтром в QSqlRelationalTableModel
Отправлено: kowsan от Ноябрь 10, 2010, 14:33
qsortfilterproxymodel


Название: Re: Помогите разобраться с фильтром в QSqlRelationalTableModel
Отправлено: paran87 от Ноябрь 10, 2010, 16:30
Ну пользоваться разными моделями не очень хочется! Потом фиг разберешься, что написал. Хотелось бы понят
1) Где я накасячил(если это конечно я)
2) Почему не работает и как допилить!!!


Название: Re: Помогите разобраться с фильтром в QSqlRelationalTableModel
Отправлено: asvil от Ноябрь 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 почему-то не содержит номера строки.