Рефакт Администрирование БД

This commit is contained in:
2025-11-05 12:36:11 +03:00
parent e9363c388b
commit 84ea6ca512
8 changed files with 102 additions and 54 deletions

View File

@@ -13,6 +13,8 @@ const QString DataBaseLMS::TypeUserDBTrainee = "trainee";
DataBaseLMS::DataBaseLMS(QWidget *ownerWidget, QObject *parent): DataBaseLMS::DataBaseLMS(QWidget *ownerWidget, QObject *parent):
QObject(parent), QObject(parent),
db(nullptr), db(nullptr),
UserNamePostgres(""),
PasswordPostgres(""),
ownerWidget(ownerWidget) ownerWidget(ownerWidget)
{ {

View File

@@ -41,12 +41,12 @@ public:
public: public:
//PostgreSQL //PostgreSQL
bool setUserPasswordPostgres(QString userName, QString password);
bool checkDriverQPSQLavailable(); bool checkDriverQPSQLavailable();
bool checkUserLMSexist(); bool checkUserLMSexist();
bool checkDataBaseLMSexist(); bool checkDataBaseLMSexist();
bool createUser();
bool createUser(QString name); bool createDB();
bool createDB(QString name);
protected: protected:
//Подключение //Подключение
@@ -126,6 +126,10 @@ private:
protected: protected:
QSqlDatabase* db; QSqlDatabase* db;
DataBaseSettings dbSettings; DataBaseSettings dbSettings;
QString UserNamePostgres;
QString PasswordPostgres;
QTranslator qtLanguageTranslator; QTranslator qtLanguageTranslator;
private: private:

View File

@@ -7,6 +7,31 @@
#include <QDomDocument> #include <QDomDocument>
#include <QProcess> #include <QProcess>
bool DataBaseLMS::setUserPasswordPostgres(QString userName, QString password)
{
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName(userName);
dbCheck.setPassword(password);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
if (dbCheck.open())
{
UserNamePostgres = userName;
PasswordPostgres = password;
dbCheck.close();
return true;
}
else
{
qDebug() << "PostgreSQL connection error.";
return false;
}
}
bool DataBaseLMS::checkDriverQPSQLavailable() bool DataBaseLMS::checkDriverQPSQLavailable()
{ {
return QSqlDatabase::isDriverAvailable("QPSQL"); return QSqlDatabase::isDriverAvailable("QPSQL");
@@ -17,8 +42,8 @@ bool DataBaseLMS::checkUserLMSexist()
DataBaseSettings settings = getDataBaseSettings(); DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL"); QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres"); dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword("12345678"); dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName); dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort); dbCheck.setPort(settings.dbPort);
@@ -53,8 +78,8 @@ bool DataBaseLMS::checkDataBaseLMSexist()
bool flDBexist = false; bool flDBexist = false;
dbCheck.setUserName("postgres"); dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword("12345678"); dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName); dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort); dbCheck.setPort(settings.dbPort);
@@ -85,13 +110,13 @@ bool DataBaseLMS::checkDataBaseLMSexist()
return flDBexist; return flDBexist;
} }
bool DataBaseLMS::createUser(QString name) bool DataBaseLMS::createUser()
{ {
DataBaseSettings settings = getDataBaseSettings(); DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL"); QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres"); dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword("12345678"); dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName); dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort); dbCheck.setPort(settings.dbPort);
@@ -118,13 +143,13 @@ bool DataBaseLMS::createUser(QString name)
} }
} }
bool DataBaseLMS::createDB(QString name) bool DataBaseLMS::createDB()
{ {
DataBaseSettings settings = getDataBaseSettings(); DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL"); QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres"); dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword("12345678"); dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName); dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort); dbCheck.setPort(settings.dbPort);
@@ -164,7 +189,7 @@ bool DataBaseLMS::createDB(QString name)
QSqlQuery query = QSqlQuery(dbCheck); QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query)) if(queryExec(queryStr, &query))
{ {
qDebug() << "The owner of database has been changed.";
} }
else else
return false; return false;
@@ -185,8 +210,8 @@ bool DataBaseLMS::createDB(QString name)
QSqlDatabase dbCheck2 = QSqlDatabase::addDatabase("QPSQL"); QSqlDatabase dbCheck2 = QSqlDatabase::addDatabase("QPSQL");
dbCheck2.setUserName("postgres"); dbCheck.setUserName(UserNamePostgres);
dbCheck2.setPassword("12345678"); dbCheck.setPassword(PasswordPostgres);
dbCheck2.setHostName(settings.dbHostName); dbCheck2.setHostName(settings.dbHostName);
dbCheck2.setPort(settings.dbPort); dbCheck2.setPort(settings.dbPort);
dbCheck2.setDatabaseName(settings.dbName); dbCheck2.setDatabaseName(settings.dbName);
@@ -202,15 +227,16 @@ bool DataBaseLMS::createDB(QString name)
while (query.next()) while (query.next())
{ {
QString tableName = query.value(0).toString(); QString tableName = query.value(0).toString();
QString alterQuery = QString("ALTER TABLE %1 OWNER TO %2;").arg(tableName).arg(newOwner); QString alterQueryStr = QString("ALTER TABLE %1 OWNER TO %2;").arg(tableName).arg(newOwner);
QSqlQuery alterQuery(dbCheck2);
dbCheck2.exec(alterQuery); //dbCheck2.exec(alterQueryStr);
/*
if (dbCheck2.exec(alterQuery)) if(!queryExec(alterQueryStr, &alterQuery))
{ {
qDebug() << "Error changing owner for table " << tableName << ":" << dbCheck2.lastError().text(); qDebug() << "Error changing owner for table " << tableName << ":" << dbCheck2.lastError().text();
return false; return false;
}*/ }
} }
} }

View File

@@ -77,13 +77,13 @@ void DialogCheckDB::on_btnRepare_clicked()
{ {
if(!resDriver) if(!resDriver)
{ {
QMessageBox::warning(this, tr("Warning!"), tr("Install PostgreSQL.")); QMessageBox::critical(this, tr("Error!"), tr("Install PostgreSQL."));
return; return;
} }
if(!resUser) if(!resUser)
{ {
if(!providerDBLMS->createUser("nameUser")) if(!providerDBLMS->createUser())
{ {
QMessageBox::critical(this, tr("Error!"), tr("Failed to create user!")); QMessageBox::critical(this, tr("Error!"), tr("Failed to create user!"));
return; return;
@@ -92,22 +92,10 @@ void DialogCheckDB::on_btnRepare_clicked()
if(!resDB) if(!resDB)
{ {
if(!providerDBLMS->createDB("nameDB")) if(!providerDBLMS->createDB())
{ {
QMessageBox::critical(this, tr("Error!"), tr("Failed to create Database!")); QMessageBox::critical(this, tr("Error!"), tr("Failed to create Database!"));
return; return;
} }
} }
} }
void DialogCheckDB::on_toolButton_clicked()
{
QProcess process;
QString program = "cmd.exe";
QStringList arguments;
arguments << "/C" << "echo Hello from QProcess" << "&&" << "pause";
process.start(program, arguments);
process.waitForFinished();
int i = 0;
}

View File

@@ -19,8 +19,6 @@ public:
private slots: private slots:
void on_btnRepare_clicked(); void on_btnRepare_clicked();
void on_toolButton_clicked();
private: private:
void check(); void check();

View File

@@ -1,4 +1,5 @@
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QMessageBox>
#include "dialogsettingstray.h" #include "dialogsettingstray.h"
#include "Systems/tools.h" #include "Systems/tools.h"
#include "ui_dialogsettingstray.h" #include "ui_dialogsettingstray.h"
@@ -240,6 +241,23 @@ void DialogSettingsTray::on_editPassword_textChanged(const QString &arg1)
void DialogSettingsTray::on_btnCheckDB_clicked() void DialogSettingsTray::on_btnCheckDB_clicked()
{ {
//Проверяем, установлен ли PostgreSQL
if(!providerDBLMS->checkDriverQPSQLavailable())
{
QMessageBox::critical(this, tr("Error!"), tr("Driver PostgreSQL is not installed!"));
return;
}
//TODO Запрос Логина и Пароля Суперюзера PostgreSQL (postgres)
QString UserNamePostgres;
QString PasswordPostgres;
//Имитация
UserNamePostgres = "postgres";
PasswordPostgres = "12345678";
if(providerDBLMS->setUserPasswordPostgres(UserNamePostgres, PasswordPostgres))
{
DialogCheckDB dlgCheckDB(providerDBLMS, this); DialogCheckDB dlgCheckDB(providerDBLMS, this);
dlgCheckDB.setWindowFlags(dlgCheckDB.windowFlags() & ~Qt::WindowContextHelpButtonHint); dlgCheckDB.setWindowFlags(dlgCheckDB.windowFlags() & ~Qt::WindowContextHelpButtonHint);
@@ -252,4 +270,10 @@ void DialogSettingsTray::on_btnCheckDB_clicked()
default: default:
break; break;
} }
}
else
{
QMessageBox::critical(this, tr("Error!"), tr("The superuser login or password is incorrect!"));
return;
}
} }

View File

@@ -64,6 +64,11 @@ DataBaseSettings ProviderDBLMS::getDBSettings()
return dbLMS->getDataBaseSettings(); return dbLMS->getDataBaseSettings();
} }
bool ProviderDBLMS::setUserPasswordPostgres(QString userName, QString password)
{
return dbLMS->setUserPasswordPostgres(userName, password);
}
bool ProviderDBLMS::checkDriverQPSQLavailable() bool ProviderDBLMS::checkDriverQPSQLavailable()
{ {
return dbLMS->checkDriverQPSQLavailable(); return dbLMS->checkDriverQPSQLavailable();
@@ -79,14 +84,14 @@ bool ProviderDBLMS::checkDataBaseLMSexist()
return dbLMS->checkDataBaseLMSexist(); return dbLMS->checkDataBaseLMSexist();
} }
bool ProviderDBLMS::createUser(QString name) bool ProviderDBLMS::createUser()
{ {
return dbLMS->createUser(name); return dbLMS->createUser();
} }
bool ProviderDBLMS::createDB(QString name) bool ProviderDBLMS::createDB()
{ {
return dbLMS->createDB(name); return dbLMS->createDB();
} }
QString ProviderDBLMS::getMainInstructorName() QString ProviderDBLMS::getMainInstructorName()

View File

@@ -81,12 +81,13 @@ public:
DataBaseSettings getDBSettings(); DataBaseSettings getDBSettings();
//PostgreSQL //PostgreSQL
bool setUserPasswordPostgres(QString userName, QString password);
bool checkDriverQPSQLavailable(); bool checkDriverQPSQLavailable();
bool checkUserLMSexist(); bool checkUserLMSexist();
bool checkDataBaseLMSexist(); bool checkDataBaseLMSexist();
bool createUser(QString name); bool createUser();
bool createDB(QString name); bool createDB();
private: private:
InterfaceDataBaseLMS* dbLMS; InterfaceDataBaseLMS* dbLMS;