Как отобразить таблицу SQLite в QTableView - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь подключиться к локальной базе данных и показать таблицу в QTableView. В настоящее время я получаю соединение с моей базой данных, но всякий раз, когда я пытаюсь добавить свой запрос в окно QTableView, я получаю QSqlError("", "Unable to find table projects", ""). Когда я запускаю SELECT * FROM projects в браузере БД для SQLite, появляется запись в этой таблице. Вот мой 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, но когда я помещаю его в путь к БД, он не подключается, но подключается так, как он у меня? Спасибо за любую помощь, все ценится.

Описание изделия. проектов:

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 голосов
/ 16 ноября 2018

Вы должны открыть соединение перед созданием модели, с другой стороны, нет необходимости создавать другое MainWindow, поэтому решение:

void MainWindow::on_actionProject_2_triggered()
{
    openDB();
    QSqlTableModel *modal = new QSqlTableModel;
    modal->setTable("projects");
    modal->select();
    ui->tableView->setModel(modal);
    closeDB();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...