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

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):
QObject(parent),
db(nullptr),
UserNamePostgres(""),
PasswordPostgres(""),
ownerWidget(ownerWidget)
{

View File

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

View File

@@ -7,6 +7,31 @@
#include <QDomDocument>
#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()
{
return QSqlDatabase::isDriverAvailable("QPSQL");
@@ -17,8 +42,8 @@ bool DataBaseLMS::checkUserLMSexist()
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres");
dbCheck.setPassword("12345678");
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
@@ -53,8 +78,8 @@ bool DataBaseLMS::checkDataBaseLMSexist()
bool flDBexist = false;
dbCheck.setUserName("postgres");
dbCheck.setPassword("12345678");
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
@@ -85,13 +110,13 @@ bool DataBaseLMS::checkDataBaseLMSexist()
return flDBexist;
}
bool DataBaseLMS::createUser(QString name)
bool DataBaseLMS::createUser()
{
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres");
dbCheck.setPassword("12345678");
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
@@ -118,13 +143,13 @@ bool DataBaseLMS::createUser(QString name)
}
}
bool DataBaseLMS::createDB(QString name)
bool DataBaseLMS::createDB()
{
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres");
dbCheck.setPassword("12345678");
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
@@ -164,7 +189,7 @@ bool DataBaseLMS::createDB(QString name)
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
qDebug() << "The owner of database has been changed.";
}
else
return false;
@@ -185,8 +210,8 @@ bool DataBaseLMS::createDB(QString name)
QSqlDatabase dbCheck2 = QSqlDatabase::addDatabase("QPSQL");
dbCheck2.setUserName("postgres");
dbCheck2.setPassword("12345678");
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck2.setHostName(settings.dbHostName);
dbCheck2.setPort(settings.dbPort);
dbCheck2.setDatabaseName(settings.dbName);
@@ -202,15 +227,16 @@ bool DataBaseLMS::createDB(QString name)
while (query.next())
{
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);
/*
if (dbCheck2.exec(alterQuery))
//dbCheck2.exec(alterQueryStr);
if(!queryExec(alterQueryStr, &alterQuery))
{
qDebug() << "Error changing owner for table " << tableName << ":" << dbCheck2.lastError().text();
return false;
}*/
}
}
}

View File

@@ -77,13 +77,13 @@ void DialogCheckDB::on_btnRepare_clicked()
{
if(!resDriver)
{
QMessageBox::warning(this, tr("Warning!"), tr("Install PostgreSQL."));
QMessageBox::critical(this, tr("Error!"), tr("Install PostgreSQL."));
return;
}
if(!resUser)
{
if(!providerDBLMS->createUser("nameUser"))
if(!providerDBLMS->createUser())
{
QMessageBox::critical(this, tr("Error!"), tr("Failed to create user!"));
return;
@@ -92,22 +92,10 @@ void DialogCheckDB::on_btnRepare_clicked()
if(!resDB)
{
if(!providerDBLMS->createDB("nameDB"))
if(!providerDBLMS->createDB())
{
QMessageBox::critical(this, tr("Error!"), tr("Failed to create Database!"));
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:
void on_btnRepare_clicked();
void on_toolButton_clicked();
private:
void check();

View File

@@ -1,4 +1,5 @@
#include <QXmlStreamReader>
#include <QMessageBox>
#include "dialogsettingstray.h"
#include "Systems/tools.h"
#include "ui_dialogsettingstray.h"
@@ -240,16 +241,39 @@ void DialogSettingsTray::on_editPassword_textChanged(const QString &arg1)
void DialogSettingsTray::on_btnCheckDB_clicked()
{
DialogCheckDB dlgCheckDB(providerDBLMS, this);
dlgCheckDB.setWindowFlags(dlgCheckDB.windowFlags() & ~Qt::WindowContextHelpButtonHint);
switch( dlgCheckDB.exec() )
//Проверяем, установлен ли PostgreSQL
if(!providerDBLMS->checkDriverQPSQLavailable())
{
case QDialog::Accepted:
break;
case QDialog::Rejected:
break;
default:
break;
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);
dlgCheckDB.setWindowFlags(dlgCheckDB.windowFlags() & ~Qt::WindowContextHelpButtonHint);
switch( dlgCheckDB.exec() )
{
case QDialog::Accepted:
break;
case QDialog::Rejected:
break;
default:
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();
}
bool ProviderDBLMS::setUserPasswordPostgres(QString userName, QString password)
{
return dbLMS->setUserPasswordPostgres(userName, password);
}
bool ProviderDBLMS::checkDriverQPSQLavailable()
{
return dbLMS->checkDriverQPSQLavailable();
@@ -79,14 +84,14 @@ bool ProviderDBLMS::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()

View File

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