отношение qt qsql допустимо, но нарушает табличное представление - PullRequest
1 голос
/ 07 апреля 2011

Я работаю с QSqlRelationalTableModel и, по большей части, идентификаторы внешнего ключа, разрешающие их значения имен через QsqlRelation, вполне довольны:

QSqlRelationalTableModel *model = db->get_db_model();
model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setTable("materialproperty");
model->select();
model->setRelation(1, QSqlRelation("parameter", "id", "name"));


MyTableview->setModel(model);

работает нормально.Но одно конкретное отношение:

model->setRelation(2, QSqlRelation("other", "id", "name"));

вызывает сбой всей модели.Единственное различие между этими двумя ситуациями заключается в том, что столбец 1 в свойствах таблицы всегда заполнен, тогда как 2 часто имеет значение NULL.Есть ли способ обойти это поведение или другое объяснение?Мои поля ID всегда текстовые.Кстати, если я создаю QSqlRelation и проверяю его действительность, он проходит нормально.

Ответы [ 2 ]

1 голос
/ 24 июня 2011

По умолчанию QString QSqlTableModel :: selectStatement () возвращает что-то вроде этого:

  SELECT ...
    FROM table1 t1, table2 t2
    WHERE (t1.fk = t2.id) AND (<filter stuff>)
ORDER BY <something>

Попробуйте переопределить его, чтобы вернуть что-то подобное:

SELECT ...
 FROM table1 t1 LEFT JOIN table2 t2 ON t1.fk = t2.id 
 WHERE <filter stuff>
 ORDER BY <something>
0 голосов
/ 13 августа 2014

Работает, если установить левое соединение следующим образом:

m_pModel->setJoinMode(QSqlRelationalTableModel::LeftJoin);
...