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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlRelationalTableModel, соответствие выборки через запрос  (Прочитано 2225 раз)
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 не прокатит, потому что мне же их ещё и редактировать надо.
Записан
QuAzI
Гость
« Ответ #1 : Июнь 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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