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

This commit is contained in:
2025-11-05 23:50:10 +03:00
parent 99d9c6d1e3
commit 2d91b18bfb
8 changed files with 61 additions and 35 deletions

View File

@@ -47,6 +47,7 @@ public:
bool checkDataBaseLMSexist(); bool checkDataBaseLMSexist();
bool createUser(); bool createUser();
bool createDB(); bool createDB();
bool prepareRestoreDBscript();
protected: protected:
//Подключение //Подключение

View File

@@ -164,25 +164,14 @@ bool DataBaseLMS::createDB()
qDebug() << "The database has been created."; qDebug() << "The database has been created.";
//Залитие БД //Залитие БД
if(prepareRestoreDBscript())
{
QProcess process; QProcess process;
//QString pgRestorePath = "C:\\restoreDB.bat"; QString pgRestorePath = "restoreDBscript.bat";
QString pgRestorePath = "restoreDB.bat";
/*
QString dbName = "databaselms2";
QString user = "postgres";
QString backupFile = "C:\\DBLMS_EMPTY_30_09_2025.backup";
QStringList arguments;
arguments << "-d" << dbName;
arguments << "-U" << user;
arguments << backupFile;
*/
process.start("cmd /C " + pgRestorePath); process.start("cmd /C " + pgRestorePath);
process.waitForFinished(-1); // Ждать бесконечно, пока процесс не завершится process.waitForFinished(-1); // Ждать бесконечно, пока процесс не завершится
}
//Назначение владельца //Назначение владельца
QString queryStr = QString("ALTER DATABASE %1 OWNER TO %2").arg(settings.dbName, settings.dbUserName); QString queryStr = QString("ALTER DATABASE %1 OWNER TO %2").arg(settings.dbName, settings.dbUserName);
@@ -210,8 +199,8 @@ bool DataBaseLMS::createDB()
QSqlDatabase dbCheck2 = QSqlDatabase::addDatabase("QPSQL"); QSqlDatabase dbCheck2 = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName(UserNamePostgres); dbCheck2.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres); dbCheck2.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);
@@ -242,3 +231,25 @@ bool DataBaseLMS::createDB()
return true; return true;
} }
bool DataBaseLMS::prepareRestoreDBscript()
{
DataBaseSettings settings = getDataBaseSettings();
QFile file("restoreDBscript.bat");
if (file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream out(&file);
out << "set CURRENT_DIR=%~dp0\n";
out << "cd %CURRENT_DIR%\n";
out << QString("set \"PGPASSWORD=%1\"\n").arg(PasswordPostgres);
out << QString("pg_restore -U %1 -h %2 -p %3 -d %4 DBLMS_EMPTY.backup\n").arg(UserNamePostgres,
settings.dbHostName,
QString::number(settings.dbPort),
settings.dbName);
file.close();
return true;
}
else
return false;
}

View File

@@ -1,5 +1,6 @@
#include <QMessageBox> #include <QMessageBox>
#include <QProcess> #include <QProcess>
#include <QFile>
#include "dialogcheckdb.h" #include "dialogcheckdb.h"
#include "ui_dialogcheckdb.h" #include "ui_dialogcheckdb.h"
@@ -68,7 +69,9 @@ void DialogCheckDB::check()
} }
if(!resDriver || !resUser || !resDB) if(!resDriver || !resUser || !resDB)
{
ui->btnRepare->setEnabled(true); ui->btnRepare->setEnabled(true);
}
else else
ui->btnRepare->setEnabled(false); ui->btnRepare->setEnabled(false);
} }
@@ -86,6 +89,7 @@ void DialogCheckDB::on_btnRepare_clicked()
if(!providerDBLMS->createUser()) if(!providerDBLMS->createUser())
{ {
QMessageBox::critical(this, tr("Error!"), tr("Failed to create user!")); QMessageBox::critical(this, tr("Error!"), tr("Failed to create user!"));
check();
return; return;
} }
} }
@@ -95,7 +99,16 @@ void DialogCheckDB::on_btnRepare_clicked()
if(!providerDBLMS->createDB()) if(!providerDBLMS->createDB())
{ {
QMessageBox::critical(this, tr("Error!"), tr("Failed to create Database!")); QMessageBox::critical(this, tr("Error!"), tr("Failed to create Database!"));
check();
return; return;
} }
} }
check();
if(resDriver && resUser && resDB)
{
QMessageBox::information(this, tr("Completed!"), tr("The database has been successfully restored!"));
this->accept();
}
} }

View File

@@ -21,6 +21,7 @@ private slots:
private: private:
void check(); void check();
void prepareRestoreDBscript();
private: private:
Ui::DialogCheckDB *ui; Ui::DialogCheckDB *ui;

View File

@@ -277,10 +277,6 @@ void DialogSettingsTray::on_btnCheckDB_clicked()
return; return;
} }
//Имитация
//UserNamePostgres = "postgres";
//PasswordPostgres = "12345678";
if(providerDBLMS->setUserPasswordPostgres(UserNamePostgres, PasswordPostgres)) if(providerDBLMS->setUserPasswordPostgres(UserNamePostgres, PasswordPostgres))
{ {
DialogCheckDB dlgCheckDB(providerDBLMS, this); DialogCheckDB dlgCheckDB(providerDBLMS, this);
@@ -289,6 +285,8 @@ void DialogSettingsTray::on_btnCheckDB_clicked()
switch( dlgCheckDB.exec() ) switch( dlgCheckDB.exec() )
{ {
case QDialog::Accepted: case QDialog::Accepted:
ui->btnSave->setEnabled(true);
flSettingsServerChanged = true;
break; break;
case QDialog::Rejected: case QDialog::Rejected:
break; break;

View File

@@ -203,7 +203,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Check</string> <string>Check&amp;&amp;Repare</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="ServerLMS.qrc"> <iconset resource="ServerLMS.qrc">

View File

@@ -314,6 +314,8 @@ void ServerLMSWidget::tryConnectionToDB()
emit signal_Menu_ShowWindow(); emit signal_Menu_ShowWindow();
QMessageBox::critical(this, tr("Error!"), tr("Database connection error!")); QMessageBox::critical(this, tr("Error!"), tr("Database connection error!"));
on_btnSettings_clicked();
} }
else else
{ {