如何在QTableView中显示SQLite表

时间:2018-11-16 03:32:18

标签: c++ qt sqlite qtableview qtsql

我正在尝试连接到本地数据库并在QTableView中显示一个表。我目前正在与数据库建立连接,但是每当我尝试将查询追加到QTableView框时,我都会得到QSqlError("", "Unable to find table projects", "")。当我在数据库浏览器中为SQLite运行SELECT * FROM projects时,将显示该表中的条目。这是我的mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "purchaseorder.h"
#include <QtSql>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    PurchaseOrder *newpo = new PurchaseOrder();

    QSqlDatabase db;

    bool openDB(){
        db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName("projectmanager.db");

        if(!db.open())
        {
            qDebug()<<"Error opening database" << db.lastError();
            return false;
        }else{
            qDebug()<<"Connection Established.";
            return true;
        }
    }

    void closeDB(){
        db.close();
        //db.removeDatabase(QSqlDatabase::defaultConnection);
    }

private slots:
    void on_actionProject_2_triggered();

private:
    Ui::MainWindow *ui;
    PurchaseOrder purchaseorder;
};

#endif // MAINWINDOW_H

这是我的mainwindow.cpp的摘要:

#include "mainwindow.h"
#include <QDebug>
#include <QSqlQueryModel>
#include <QtSql>

void MainWindow::on_actionProject_2_triggered()     // Load PROJECT table
{
    QSqlTableModel* modal = new QSqlTableModel();
    MainWindow conn;

    conn.openDB();

    modal->setTable("projects");
    modal->select();
    ui->tableView->setModel(modal);
    qDebug()<<modal->lastError();

    conn.close();
}

我相信一切都会进行直到。 modal->setTable("projects"); 另外,我的projectmanager.db文件存储在/db/projectmanager.db中,但是当我将其放在数据库路径中时,它不会连接,但会以我的方式连接吗?谢谢您的帮助,不胜感激。

Desc。项目:

CREATE TABLE `projects` ( `project_id` INTEGER PRIMARY KEY AUTOINCREMENT,   
`project_name` TEXT,
`client` INTEGER,
`lead_employee` INTEGER,
`description` TEXT,
`start_date` TEXT,
`deadline` TEXT,
`status` INTEGER )

1 个答案:

答案 0 :(得分:1)

您必须在创建模型之前打开连接,另一方面,不必创建另一个MainWindow,因此解决方案是:

void MainWindow::on_actionProject_2_triggered()
{
    openDB();
    QSqlTableModel *modal = new QSqlTableModel;
    modal->setTable("projects");
    modal->select();
    ui->tableView->setModel(modal);
    closeDB();
}