我正在使用QSqlRelationalTableModel,并且大部分外键ID通过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字段始终是文本uuids。顺便说一下如果我构造一个QSqlRelation并测试它的有效性,它就通过了。
答案 0 :(得分:1)
默认情况下,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>
答案 1 :(得分:0)
如果你像这样设置左连接,它可以工作:
m_pModel->setJoinMode(QSqlRelationalTableModel::LeftJoin);