我正在尝试使用 QT 的 QSqlRelationalTableModel
。我是 MySQL 表关系的新手,但我仍然尝试过,但无法使其在 QT 中正常工作。
我可以从 MySQL 得到结果:
create table stu(idd int auto_increment primary key,stu_name varchar(60),stu_age int);
create table stuInfo(idd int auto_increment primary key,stu_city varchar(60),stu_sub varchar(100), foreign key(id) references stu(id));
select stu.stu_name,stuInfo.stu_city from stu inner join stuInfo on stu.id=stuInfo.id;
从 MySQL 中检索数据:
select stu.stu_name,stuInfo.stu_city from stu inner join stuInfo on stu.id=stuInfo.id;
在 QT 中我无法让它工作。我对 setRelation()
和 QSqlRelation()
感到困惑。我不太了解如何在 QT 中执行相同的查询,我尝试了多种方式,但有时我得到空白数据、难看的 header 、错误等。
这是我的学习代码:
model = new QSqlRelationalTableModel();
model->setTable("stu");
model->setRelation(0,QSqlRelation("stu","id","stu_name","stu_age"));
model->setRelation(0,QSqlRelation("stuInfo","id","stu_city","stu_sub"));
model->select();
ui->tableView->setModel(model);
最佳答案
QSqlRelation
将一个字段的值替换为关系中另一个字段的值,被替换的字段将不再出现在查询中,因此您不能分配 2 个关系到同一列,并且您不能将关系分配给主键(如 the documentation of setRelation
中所述)。
基本上 QSqlRelationalTableModel
应该使用的结构将是一个主表,它有 1 个或多个外部索引字段,并且这些字段中的每一个都可以被中选择的字段的值替换外部索引来自的表(例如:用来自另一个表的城市名称替换主表中的“city_id”数字字段,“city_id”是主键)。
对于您想做的事情,您应该将 QSqlQueryModel
与手动构造的查询一起使用,而不是 QSqlRelationalTableModel
。
关于c++ - 如何与QT QSqlRelationalTableModel中的mysql表建立关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20247493/