Compare commits

...

2 Commits

Author SHA1 Message Date
f2bff8d0e2 feat: added autocreate tables 2026-01-17 19:29:22 +03:00
47348a1678 feat: add sql init 2026-01-17 15:25:18 +03:00
6 changed files with 104 additions and 12 deletions

View File

@@ -37,6 +37,7 @@ target_link_libraries(
${CMAKE_PROJECT_NAME} ${CMAKE_PROJECT_NAME}
Qt5::Core Qt5::Core
Qt5::Gui Qt5::Gui
Qt5::Sql
Qt5::Widgets Qt5::Widgets
) )

3
deps/tables.ddl vendored
View File

@@ -10,6 +10,3 @@ CREATE TABLE IF NOT EXISTS clients (
yourCompany TEXT NOT NULL, yourCompany TEXT NOT NULL,
comment TEXT comment TEXT
); );
COMMENT ON TABLE clients IS '';
COMMENT ON FIELD clients.id IS '';

View File

@@ -1,16 +1,46 @@
#include "LicenseModel.h" #include "LicenseModel.h"
// Qt
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QDebug>
// Self
#include <qfile.h>
#include "../def.h"
const static int COLUMN_COUNT = 9; const static int COLUMN_COUNT = 9;
LicenseModel::LicenseModel(QObject* parent) LicenseModel::LicenseModel(QObject* parent)
: QAbstractTableModel(parent) : QAbstractTableModel(parent)
{ {
m_db = QSqlDatabase::addDatabase("QSQLITE");
m_db.setDatabaseName(DB_PATH);
if (!m_db.open())
{
m_status = Status::DbExistError;
m_errors.append("Database connection failed: " + m_db.lastError().text());
}
else
{
if (!checkTables())
{
m_status = Status::DbStructError;
m_errors.append("Database tables are not valid");
}
else
{
m_status = Status::Ok;
}
}
} }
LicenseModel::~LicenseModel() LicenseModel::~LicenseModel()
{ {
m_db.close();
} }
int LicenseModel::rowCount(const QModelIndex &parent) const int LicenseModel::rowCount(const QModelIndex &parent) const
@@ -72,10 +102,48 @@ QVariant LicenseModel::headerData(int section, Qt::Orientation orientation, int
LicenseModel::Status LicenseModel::getStatus() LicenseModel::Status LicenseModel::getStatus()
{ {
return Status::Ok; return m_status;
} }
QString LicenseModel::getStatusText() QString LicenseModel::getStatusText()
{ {
return m_errors.join('n'); return m_errors.join('\n');
}
bool LicenseModel::checkTables()
{
bool clienttableExist = false;
for (const auto &table : m_db.tables())
{
if (table == "clients")
return true;
}
if (!clienttableExist)
return false;
}
bool LicenseModel::prepareDatabase()
{
QFile tablesFile(QStringLiteral(":/deps/tables.ddl"));
if (!tablesFile.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
m_status = Status::None;
m_errors.clear();
for (auto item : QString(tablesFile.readAll()).split(';'))
{
if (item.trimmed().isEmpty())
continue;
QSqlQuery query(item.trimmed() + ";", m_db);
if (!query.exec())
{
m_status = Status::DbStructError;
qDebug() << item.trimmed() + ";" << query.lastError().text();
m_errors.append(query.lastError().text());
return false;
}
}
return true;
} }

View File

@@ -2,6 +2,7 @@
#define LICENSEMANAGER_LICENSEMODEL_H #define LICENSEMANAGER_LICENSEMODEL_H
#include <QAbstractTableModel> #include <QAbstractTableModel>
#include <QtSql/QSqlDatabase>
class LicenseModel : public QAbstractTableModel class LicenseModel : public QAbstractTableModel
{ {
@@ -41,9 +42,16 @@ public:
Status getStatus(); Status getStatus();
QString getStatusText(); QString getStatusText();
bool prepareDatabase();
private:
bool checkTables();
private: private:
QList<LicenseItem> m_data; QList<LicenseItem> m_data;
Status m_status = Status::None;
QStringList m_errors; QStringList m_errors;
QSqlDatabase m_db;
}; };

View File

@@ -1,21 +1,20 @@
#include "MainWidget.h" #include "MainWidget.h"
// Qt // Qt
#include <QApplication>
#include <QDebug>
#include <QHeaderView> #include <QHeaderView>
#include <QLabel> #include <QLabel>
#include <QMenu> #include <QMenu>
#include <QMessageBox>
#include <QPushButton> #include <QPushButton>
#include <QTableView> #include <QTableView>
#include <QTimer>
#include <QToolBar> #include <QToolBar>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QContextMenuEvent> #include <QContextMenuEvent>
// Qt
#include <QAction>
// Self // Self
#include <QMessageBox>
#include "LicenseModel/LicenseModel.h" #include "LicenseModel/LicenseModel.h"
MainWidget::MainWidget(QWidget *parent) MainWidget::MainWidget(QWidget *parent)
@@ -26,6 +25,25 @@ MainWidget::MainWidget(QWidget *parent)
setWindowTitle("LicenseManager"); setWindowTitle("LicenseManager");
resize({800, 600}); resize({800, 600});
// Model init
{
if (m_licenseModel->getStatus() == LicenseModel::Status::DbStructError)
{
if (!m_licenseModel->prepareDatabase())
{
QTimer::singleShot(0, [&]() {
QMessageBox messageBox;
messageBox.setIcon(QMessageBox::Critical);
messageBox.setWindowTitle(tr("Error"));
messageBox.setText(tr("Error with prepare database"));
messageBox.setDetailedText(m_licenseModel->getStatusText());
messageBox.exec();
QApplication::quit();
});
}
}
}
// Ui // Ui
{ {
m_tableView = new QTableView(this); m_tableView = new QTableView(this);

View File

@@ -3,6 +3,6 @@
#include <QString> #include <QString>
const static QStringView DB_PATH = "./db.sqlite"; const static QString DB_PATH = "./db.sqlite";
#endif //LICENSEMANAGER_DEF_H #endif //LICENSEMANAGER_DEF_H