Russian Qt Forum

Qt => Вопросы новичков => Тема начата: QuAzI от Июнь 01, 2011, 08:20



Название: QSqlRelationalTableModel, соответствие выборки через запрос
Отправлено: QuAzI от Июнь 01, 2011, 08:20
Мучался, мучался, почему форма для редактирования не заполняется, вымучал.
Оказывается
Код:
  model->setQuery(" select kids.id, kids.name, kids.birthday, schools.name, kids.year_finish, kids.next_point from kids "
                  " LEFT JOIN schools on kids.school=schools.id "
                  , db);
выбирает записей больше, чем
Код:
        tableModel = new QSqlRelationalTableModel(this, db);
        tableModel->setTable("kids");
        tableModel->setRelation( tableModel->fieldIndex("school"),
                                QSqlRelation("schools", "id", "name"));       
        if (!tableModel->select())
В том числе запрос выбирает записи, в которых тянущееся в другую таблицу поле school пусто, а в модели и соответственно в маппере этой записи нет. Как заставить выбирать tableModel такие записи? Создавать view не прокатит, потому что мне же их ещё и редактировать надо.


Название: Re: QSqlRelationalTableModel, соответствие выборки через запрос
Отправлено: QuAzI от Июнь 01, 2011, 10:31
Пока "по человечески" не получается, сделал по старому, заполнил данные в полях через QSqlQuery, а вот QComboBox заполнил через модель. Всё бы хорошо, но теперь проблема вытянуть выбранный идентификатор (ключ) из комбика. Нашёл такой пример http://www.qtcentre.org/threads/28602-Method-to-read-foreign-key-values-from-QSqlRelationalTableModel
Перебил его, получил
Код:
    QSqlTableModel* relatedTable = tableModel->relationModel(3);
    QModelIndex idx = relatedTable->match(relatedTable->index(0, 1), Qt::DisplayRole, tableModel->data(tableModel->index(0, 0, QModelIndex()), Qt::DisplayRole)).at(0);
    QVariant school;
    school.setValue( relatedTable->data(relatedTable->index(idx.row(), 0, QModelIndex()), Qt::DisplayRole) );
    query->bindValue( ":school", school.toInt() );
Первый раз отрабатывает, а потом на второй строке вылетает матерясь
Код:
ASSERT failure in QList<T>::at: "index out of range", file d:\Qt\2010.05\qt\include/QtCore/../../src/corelib/tools/qlist.h, line 455