我正在尝试连接到本地数据库并在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 )
答案 0 :(得分:1)
您必须在创建模型之前打开连接,另一方面,不必创建另一个MainWindow,因此解决方案是:
void MainWindow::on_actionProject_2_triggered()
{
openDB();
QSqlTableModel *modal = new QSqlTableModel;
modal->setTable("projects");
modal->select();
ui->tableView->setModel(modal);
closeDB();
}