QSqlTableModel变量定义时遇到的问题

原创 2016年08月29日 09:32:48

1.发现问题

在做一个Qt+Sqllite的程序时,定义了一个QSqlTableModel变量在MainWindow类(QSqlTableModel model;)中,可是无论怎么都无法从数据库表中读出数据(数据库连接是成功的)。

#endif // MAINWINDOW_H

2.问题进展

无法运行后发现之前写的代码是定义成指针的形式的,如:QSqlTableModel *model;,这时在MainWindow的构造函数中需要new一下,果然可以输出数据库表中内容。

3.解决问题

于是果断的查询了下源码和帮助文档


如果数据库是无效的,不链接默认的数据库中。所以推测在MainWindow类是定义变量QSqlTableModel model;无法在定义时链接到打开的数据库(或者说此时数据库还没有打开)。

所以如果在MainWindow类中定义就要定义成指针的形式。

database.h代码

#ifndef DATABASE_H
#define DATABASE_H
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QObject>
static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("waterData.db");
    if(!db.open()) return false;
    QSqlQuery query;
    query.exec(QObject::tr("create table user (id int, name vchar primary key,passWord vchar)"));
    query.exec(QObject::tr("insert into user values (1,'Tom',999)"));
    query.exec(QObject::tr("insert into user values (2,'Lily',888)"));
    query.exec(QObject::tr("insert into user values (3,'Lucy',666)"));
    query.exec(QObject::tr("insert into user values (4,'小强',555)"));
return true;
}
#endif // DATABASE_H


MainWindow.h代码

在Mainwindow类中定义QSqlTableModel *model;

MainWindow构造函数代码

    bool sqlState =createConnection();
    if(sqlState)
    {
        qDebug()<<"The database is open !";
    }
    else
    {
        qDebug()<<"open failed !";
    }
    model->setTable("user");
    model->select();
    for(int i=0;i<model->rowCount();++i)
    {
        QSqlRecord record = model->record(i);
        QString name = record.value("id").toString();
        qDebug()<<name<<__FUNCTION__;
    }

    model = new QSqlTableModel();
    model->setTable("user");
    model->select();
    for(int i=0;i<model->rowCount();++i)
    {
        QSqlRecord record = model->record(i);
        QString name = record.value("id").toString();
        qDebug()<<name<<__FUNCTION__;
    }

相关文章推荐

十六、Qt数据库 之 QSqlQueryModel & QSqlTableModel

 声明:本文原创于yafeilinux的百度博客,http://hi.baidu.com/yafeilinux 转载请注明出处。(1)QSqlQueryModel在上一篇的最后我们说到,Qt中使用了自...
  • Yibaini
  • Yibaini
  • 2010年04月07日 17:49
  • 5879

Qt开发,链接了数据库后,调用QSqlQuery::setQuery执行SQL语句获取我们想要的数据

QSqlQueryModel* SqlClass::OpenDatabase() { db = &QSqlDatabase::addDatabase("QODBC","xxx"); i...

QSqlQuery问题总结

QSqlQuery::value: not positioned on a valid record

Qt QSqlTableModel 使用心得

Qt  QSqlTableModel  使用心得 连接数据库 执行sql查询,条件显示,排序 获取记录数,列数以及记录内容,字段内容 新增,修改,删除,恢复 其它     1-----...

QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型

QSqlTableModel类继承至QSqlQueryModel类,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序 常用函数 QVariant header...

Qt使用 QSqlTableModel 模型操作数据库

Qt可以使用SQL语句完成对数据库的常规操作。如果不需要复杂的查询,QSqlTableModel模型基本可以满足需求。本文将针对QSqlTableModel模型操作sqlite进行说明。       ...

QT——QSqlTableModel

QSqlTableModel::QSqlTableModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase()) Creates an e...

Qt数据库 QSqlTableModel实例操作

http://mobile.51cto.com/symbian-271567_all.htm 本文介绍的是Qt数据库 QSqlTableModel实例操作,详细操作请先来看内...

QSqlTableModel +QTableView 无法更新数据库

QSqlTableModel +QTableView 无法更新数据库,model->submitAll()成功,但无法更新数据表。...
  • niceky
  • niceky
  • 2016年08月25日 14:07
  • 558

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QSqlTableModel变量定义时遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)