【问题标题】:How do I display a SQLite table in a QTableView如何在 QTableView 中显示 SQLite 表
【发布时间】:2019-04-19 05:43:20
【问题描述】:

我正在尝试连接到本地数据库并在 QTableView 中显示一个表。我目前正在连接到我的数据库,但是每当我尝试将查询附加到 QTableView 框时,我都会收到QSqlError("", "Unable to find table projects", "")。当我在 SQLite 的 DB 浏览器中运行 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 的 sn-p:

#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-&gt;setTable("projects"); 我也有我的projectmanager.db 文件存储在/db/projectmanager.db 但是当我把它放在我的数据库路径中时它没有连接但它会按照我的方式连接它?感谢您的任何帮助,不胜感激。

描述。项目数:

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 )

【问题讨论】:

  • QSqlDatabase db; highly recommended QSqlDatabase 类型不能用作成员变量。请提供 minimal, complete, and verifiable example。现在,您的问题有点接近但尚未完成。 (例如示例数据库数据?)
  • @TrebuchetMS 感谢您的建议,我已添加我要获取的表格。如果我可以提供更多信息,请告诉我。
  • /db/projectmanager.db 是完整的文件路径吗?如果没有,请将其替换为完整路径。 (如果您可以使用的最佳方式是相对路径,请考虑使用 QDir。)
  • @TrebuchetMS 完整路径是C:/Users/jorda/Documents/divisionrepo/tdproject/db/projectmanager.db 我应该在问题中提到我也试过这个,结果相同(连接已建立,找不到表项目)。
  • @TrebuchetMS 如果我从该路径中删除 .db 文件,它仍然会在“已建立连接”的情况下运行。

标签: c++ qt sqlite qtableview qtsql


【解决方案1】:

在创建模型之前必须先打开连接,另一方面不需要再创建一个MainWindow,所以解决方法是:

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

【讨论】:

    猜你喜欢
    • 2014-07-08
    • 2019-02-27
    • 2016-10-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多