找回密码
 立即注册
收起左侧

1个表如何对应多个外键,且能够正常搜索、更新、修改

9
回复
7454
查看
[复制链接]
累计签到:87 天
连续签到:1 天
来源: 2013-7-22 10:55:57 显示全部楼层 |阅读模式
1Qter豆
我按版主的例子添加了个外键,想把管理员栏和性别栏设成外键,有下拉菜单,但是只设一个还能显示,设了两个外键,表就不显示了。

还有请问怎么搜索那些字段,比如 在某一栏下拉菜单显示是管理员,我搜管理员3个字却搜不到那一行。

更新也是,更新之后不显示外键的值。

非常感谢!!!求指点啊!!!

最佳答案

查看完整内容

你搜索一定是要搜索现在表中显示的内容,现在表中显示的内容一定在主表里,所以可以搜索的。比如说男性,主表中虽然可能没有显示男性,但是有**项,是用编号显示的,可以通过搜索编号来代替。 如果搜索后进行了更改,然后要重新显示,可以这样: model->submitAll(); model->setTable("student"); model->setRelation(3, QSqlRelation("course", "id", "name")); model->setRelation(2, QSqlRelation("**", "id", "n ...
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-7-22 10:55:58 显示全部楼层
20030969 发表于 2013-7-23 10:35
发现问题了 加上 usrmodel->setEditStrategy(QSqlTableModel::OnManualSubmit); 就没办法显示2个外键。

...

你搜索一定是要搜索现在表中显示的内容,现在表中显示的内容一定在主表里,所以可以搜索的。比如说男性,主表中虽然可能没有显示男性,但是有**项,是用编号显示的,可以通过搜索编号来代替。
如果搜索后进行了更改,然后要重新显示,可以这样:
model->submitAll();
    model->setTable("student");
    model->setRelation(3, QSqlRelation("course", "id", "name"));
    model->setRelation(2, QSqlRelation("**", "id", "name"));
    model->select();
这是修改后的例子:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-22 21:18:46 显示全部楼层
本帖最后由 20030969 于 2013-7-22 21:21 编辑

没人回答吗。。。
我把部分代码贴上来

关联2个外键的。

没人回答吗。。。
我把部分代码贴上来

关联2个外键的。

usrmodel = new QSqlRelationalTableModel (this);
    usrmodel->setEditStrategy(QSqlTableModel::OnManualSubmit);//OnFieldChange实时修改OnManualSubmit
    usrmodel->setTable("userdata");
    usrmodel->setRelation(3,QSqlRelation("usradmin","type","typename"));
   usrmodel->setRelation(5,QSqlRelation("**","**type","type**"));

    usrmodel->setHeaderData(0,Qt::Horizontal,QObject::tr("序列号"));
    usrmodel->setHeaderData(1, Qt::Horizontal, QObject::tr("用户名"));
    usrmodel->setHeaderData(2, Qt::Horizontal, QObject::tr("密码"));
    usrmodel->setHeaderData(3, Qt::Horizontal, QObject::tr("用户类型"));
    usrmodel->setHeaderData(4, Qt::Horizontal, QObject::tr("姓名"));
    usrmodel->setHeaderData(5, Qt::Horizontal, QObject::tr("性别"));
    usrmodel->setHeaderData(6, Qt::Horizontal, QObject::tr("部门"));
    usrmodel->setHeaderData(7, Qt::Horizontal, QObject::tr("职位"));
    usrmodel->select(); //选取整个表的所有行
    ui->tableView->setModel(usrmodel);
    ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView));

查询代码


QString name = ui->lineEdit->text();
    usrmodel->setFilter(QObject::tr("userdata.id = '%1'").arg(name));
    usrmodel->setFilter(QObject::tr("relTblAl_2.typename ='%1'").arg(name));
    usrmodel->select(); //显示结果
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-7-23 09:51:59 显示全部楼层
可以的啊。可能是因为你生成的数据库文件没有更新的缘故,去构建目录里面把生成的数据库文件删除,然后再编译运行程序试试。

下面是个例子!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-23 10:35:47 显示全部楼层
yafeilinux 发表于 2013-7-23 09:51
可以的啊。可能是因为你生成的数据库文件没有更新的缘故,去构建目录里面把生成的数据库文件删除,然后再编 ...

发现问题了 加上 usrmodel->setEditStrategy(QSqlTableModel::OnManualSubmit); 就没办法显示2个外键。

如果我要筛选比如 全是男性或者全是管理员 应该怎么做?这个搜索只能搜主表里的值。

还有就是 如果更新显示下这个表,结果就变成原始表,连接的外键失效了。求教aaaaaa  !!!谢谢!!!
回复

使用道具 举报

尚未签到

2013-7-25 11:33:47 显示全部楼层
yafeilinux 发表于 2013-7-24 15:52
你搜索一定是要搜索现在表中显示的内容,现在表中显示的内容一定在主表里,所以可以搜索的。比如说男性, ...

在Qt5.1中怎么才可以让数据库中的中文正常显示
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-26 00:31:12 显示全部楼层
yafeilinux 发表于 2013-7-24 15:52
你搜索一定是要搜索现在表中显示的内容,现在表中显示的内容一定在主表里,所以可以搜索的。比如说男性, ...

明白了……我再去试试,非常感谢!!!
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-26 09:09:29 显示全部楼层
yafeilinux 发表于 2013-7-24 15:52
你搜索一定是要搜索现在表中显示的内容,现在表中显示的内容一定在主表里,所以可以搜索的。比如说男性, ...

试了下可以实现了,就是查找还是有点小小的问题 比如我查一个汉字,我希望把表里所有有这个汉字的哪一行都显示出来,而不是只限定只在某一栏找。

比如我找 部 字
那么姓名里有 部 字的 还有部门栏里有 部 字的都筛选出来 应该怎么弄了?谢谢!!!!
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-7-26 10:01:19 显示全部楼层
20030969 发表于 2013-7-26 09:09
试了下可以实现了,就是查找还是有点小小的问题 比如我查一个汉字,我希望把表里所有有这个汉字的哪一行 ...

sql里面的查找好像可以同时选定好几个字段吧,你查查看。
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-7-26 17:30:13 显示全部楼层
竞风 发表于 2013-7-25 11:33
在Qt5.1中怎么才可以让数据库中的中文正常显示

把生成数据库表的所有代码重新用 utf8保存一下,删除以前生成的数据库文件,重新运行即可!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了