diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index e779e34..e8e28a2 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -47,6 +47,7 @@ public: bool checkDataBaseLMSexist(); bool createUser(); bool createDB(); + bool prepareRestoreDBscript(); protected: //Подключение diff --git a/DataBaseLMS/databaselms_Postgresql.cpp b/DataBaseLMS/databaselms_Postgresql.cpp index fdf5c3d..f8fdb83 100644 --- a/DataBaseLMS/databaselms_Postgresql.cpp +++ b/DataBaseLMS/databaselms_Postgresql.cpp @@ -164,25 +164,14 @@ bool DataBaseLMS::createDB() qDebug() << "The database has been created."; //Залитие БД + if(prepareRestoreDBscript()) + { + QProcess process; + QString pgRestorePath = "restoreDBscript.bat"; - QProcess process; - //QString pgRestorePath = "C:\\restoreDB.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.waitForFinished(-1); // Ждать бесконечно, пока процесс не завершится - + process.start("cmd /C " + pgRestorePath); + process.waitForFinished(-1); // Ждать бесконечно, пока процесс не завершится + } //Назначение владельца 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"); - dbCheck.setUserName(UserNamePostgres); - dbCheck.setPassword(PasswordPostgres); + dbCheck2.setUserName(UserNamePostgres); + dbCheck2.setPassword(PasswordPostgres); dbCheck2.setHostName(settings.dbHostName); dbCheck2.setPort(settings.dbPort); dbCheck2.setDatabaseName(settings.dbName); @@ -242,3 +231,25 @@ bool DataBaseLMS::createDB() 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; +} diff --git a/InstructorsAndTrainees/CMakeLists.txt b/InstructorsAndTrainees/CMakeLists.txt index 78d06a7..e66266b 100644 --- a/InstructorsAndTrainees/CMakeLists.txt +++ b/InstructorsAndTrainees/CMakeLists.txt @@ -156,22 +156,22 @@ if(PROJECT_TYPE_DEBUG) ${REPO_PATH}/BUILDS/Debug64/InstructorsAndTrainees/libInstructorsAndTrainees.dll ${REPO_PATH}/BUILDS/Debug64/GUIdataBaseLMS) - add_custom_command(TARGET InstructorsAndTrainees - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${REPO_PATH}/BUILDS/Debug64/InstructorsAndTrainees/libInstructorsAndTrainees.dll - ${REPO_PATH}/BUILDS/Debug64/TrayServerLMS) + add_custom_command(TARGET InstructorsAndTrainees + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${REPO_PATH}/BUILDS/Debug64/InstructorsAndTrainees/libInstructorsAndTrainees.dll + ${REPO_PATH}/BUILDS/Debug64/TrayServerLMS) else() add_custom_command(TARGET InstructorsAndTrainees POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${REPO_PATH}/BUILDS/Release64/InstructorsAndTrainees/libInstructorsAndTrainees.dll ${REPO_PATH}/BUILDS/Release64/GUIdataBaseLMS) - add_custom_command(TARGET InstructorsAndTrainees - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${REPO_PATH}/BUILDS/Release64/InstructorsAndTrainees/libInstructorsAndTrainees.dll - ${REPO_PATH}/BUILDS/Release64/TrayServerLMS) + add_custom_command(TARGET InstructorsAndTrainees + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${REPO_PATH}/BUILDS/Release64/InstructorsAndTrainees/libInstructorsAndTrainees.dll + ${REPO_PATH}/BUILDS/Release64/TrayServerLMS) endif() #Только для TSMP! diff --git a/ServerLMS/dialogcheckdb.cpp b/ServerLMS/dialogcheckdb.cpp index 7ba4464..bb718c5 100644 --- a/ServerLMS/dialogcheckdb.cpp +++ b/ServerLMS/dialogcheckdb.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "dialogcheckdb.h" #include "ui_dialogcheckdb.h" @@ -68,7 +69,9 @@ void DialogCheckDB::check() } if(!resDriver || !resUser || !resDB) + { ui->btnRepare->setEnabled(true); + } else ui->btnRepare->setEnabled(false); } @@ -86,6 +89,7 @@ void DialogCheckDB::on_btnRepare_clicked() if(!providerDBLMS->createUser()) { QMessageBox::critical(this, tr("Error!"), tr("Failed to create user!")); + check(); return; } } @@ -95,7 +99,16 @@ void DialogCheckDB::on_btnRepare_clicked() if(!providerDBLMS->createDB()) { QMessageBox::critical(this, tr("Error!"), tr("Failed to create Database!")); + check(); return; } } + + check(); + + if(resDriver && resUser && resDB) + { + QMessageBox::information(this, tr("Completed!"), tr("The database has been successfully restored!")); + this->accept(); + } } diff --git a/ServerLMS/dialogcheckdb.h b/ServerLMS/dialogcheckdb.h index 1342724..5eeef36 100644 --- a/ServerLMS/dialogcheckdb.h +++ b/ServerLMS/dialogcheckdb.h @@ -21,6 +21,7 @@ private slots: private: void check(); + void prepareRestoreDBscript(); private: Ui::DialogCheckDB *ui; diff --git a/ServerLMS/dialogsettingstray.cpp b/ServerLMS/dialogsettingstray.cpp index c35242b..5baec07 100644 --- a/ServerLMS/dialogsettingstray.cpp +++ b/ServerLMS/dialogsettingstray.cpp @@ -277,10 +277,6 @@ void DialogSettingsTray::on_btnCheckDB_clicked() return; } - //Имитация - //UserNamePostgres = "postgres"; - //PasswordPostgres = "12345678"; - if(providerDBLMS->setUserPasswordPostgres(UserNamePostgres, PasswordPostgres)) { DialogCheckDB dlgCheckDB(providerDBLMS, this); @@ -289,6 +285,8 @@ void DialogSettingsTray::on_btnCheckDB_clicked() switch( dlgCheckDB.exec() ) { case QDialog::Accepted: + ui->btnSave->setEnabled(true); + flSettingsServerChanged = true; break; case QDialog::Rejected: break; diff --git a/ServerLMS/dialogsettingstray.ui b/ServerLMS/dialogsettingstray.ui index d7968ff..7f78a77 100644 --- a/ServerLMS/dialogsettingstray.ui +++ b/ServerLMS/dialogsettingstray.ui @@ -203,7 +203,7 @@ - Check + Check&&Repare diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp index 8021d97..3e8f06b 100644 --- a/ServerLMS/serverlmswidget.cpp +++ b/ServerLMS/serverlmswidget.cpp @@ -314,6 +314,8 @@ void ServerLMSWidget::tryConnectionToDB() emit signal_Menu_ShowWindow(); QMessageBox::critical(this, tr("Error!"), tr("Database connection error!")); + + on_btnSettings_clicked(); } else {