• 7066阅读
  • 5回复

请教关于QSqlQueryModel 与QSqlTableModel的一个问题 [复制链接]

上一主题 下一主题
离线wu9961
 

只看楼主 倒序阅读 楼主  发表于: 2009-04-24
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
看qt sql方面的例程,都是调用了一个connection.h的头文件,该头文件在内存中创建了一个sqlite数据库,并且建立了表并且插入了一些元素。
而在程序中,QSqlTableModel或QSqlQueryModel 的初始化都是这样进行的,QSqlTableModel model;或QSqlQuery query; 没有任何参数,该构造函数应该是QSqlTableModel ( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() )这个,难道QSqlDatabase() 就会获取当前已经打开的数据库?如果这样的话,那么如果已经打开两个数据库这样初始化是不是就不行了,就得传入指定数据库对象了?
离线wu9961

只看该作者 1楼 发表于: 2009-04-24
请问没有人能解决一下这个问题吗 ?
离线sundp

只看该作者 2楼 发表于: 2009-04-24
QSqlTableModel 帮助文档中的例程没指定参数,用了默认连接的数据库。
我在实际应用中测试这种用法,不行。
原例程的写法是这样的:
QSqlTableModel *model = new QSqlTableModel;
必须要这样写:
QSqlTableModel *model = new QSqlTableModel(this,QSqlDatabase);
也就是说,必须明确指定要连接的数据库才可以。
我的应用中也是同时连接了两个数据库,一个在本地,一个在服务器上。
人境结庐<http://sundp70.blog.163.com>心远地偏
离线wu9961

只看该作者 3楼 发表于: 2009-04-24
可是我也模拟那个例程写了一个connection.h头文件,当然头文件的最后不关闭db,使用和例程同样的方法,也能操作数据库,但是我就是不明白他是怎么做的,根本也没有指定,怎么会知道操作哪个呢?
离线itougen
只看该作者 4楼 发表于: 2009-04-28
我也刚把这个问题解决了,主要原因是model用QSqlQueryModel和QSqlTableModel的时候
都会自动打开数据库,不信你只用
QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("xxxx");
不打开数据库,照样能得到数据库里面的数据

解决办法:
将QSqlDatabase db;设置为全局

xxx.h
public:
    QSqlDatabase db;

xxx.cpp
db==QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("xxxx");

每次方法调用的时候 直接调用db就可以了
离线dingliang410
只看该作者 5楼 发表于: 2011-08-25
快速回复
限100 字节
 
上一个 下一个