1. 程式人生 > >QSqlTableModel變數定義時遇到的問題

QSqlTableModel變數定義時遇到的問題

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__;
    }