c++ - 如何与QT QSqlRelationalTableModel中的mysql表建立关系?

标签 c++ mysql sql qt

我正在尝试使用 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/

相关文章:

php 标签系统 - 如果标签已存在于表中

c++ - 错误 : name lookup of 'i' changed for ISO 'for' scoping

c++ - 由于父类(super class)(按值传递)导致的重载构造函数调用不明确

c++ - 相当于 C++ 的 MATLAB 函数 resample

php - 日期差异

mysql - 选择所有连接行都匹配的记录

c++ - 为什么在 C++ 中使用 char 数组而不是 int 作为位集

mysql - 如何在MySql中返回具有相同列值的行

mysql - 使用/用户输入连接三个表

mysql - MySQL 上的 0.07 秒查询在 MariaDB 上需要 11.68 秒?