qt qsql关系有效,但是打破了表视图

时间:2011-04-07 08:14:22

标签: sql qt relational

我正在使用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并测试它的有效性,它就通过了。

2 个答案:

答案 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);