【发布时间】: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->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 recommendedQSqlDatabase类型不能用作成员变量。请提供 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