This commit is contained in:
2025-11-01 13:19:52 +03:00
parent 0d1d851e3f
commit e9363c388b
22 changed files with 801 additions and 484 deletions

View File

@@ -29,225 +29,6 @@ void DataBaseLMS::slot_LanguageChanged(QString language)
QCoreApplication::installTranslator(&qtLanguageTranslator);
}
bool DataBaseLMS::checkDriverQPSQLavailable()
{
return QSqlDatabase::isDriverAvailable("QPSQL");
}
bool DataBaseLMS::checkUserLMSexist()
{
DataBaseSettings dbSett = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres");
dbCheck.setPassword("12345678");
dbCheck.setHostName(dbSett.dbHostName);
dbCheck.setPort(dbSett.dbPort);
if (dbCheck.open())
{
QSqlQuery query = QSqlQuery(dbCheck);
query.prepare("SELECT 1 FROM pg_roles WHERE rolname = :username");
query.bindValue(":username", dbSett.dbUserName);
if (query.exec() && query.next())
{
qDebug() << "Пользователь существует.";
return true;
}
else
{
qDebug() << "Пользователь не существует.";
return false;
}
}
else
{
qDebug() << "Ошибка подключения к PostreSQL.";
return false;
}
}
bool DataBaseLMS::checkDataBaseLMSexist()
{
DataBaseSettings dbSett = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
bool flDBexist = false;
dbCheck.setUserName("postgres");
dbCheck.setPassword("12345678");
dbCheck.setHostName(dbSett.dbHostName);
dbCheck.setPort(dbSett.dbPort);
if (dbCheck.open())
{
QString queryStr = QString("SELECT datname FROM pg_database");
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Инструктор
QString nameDB = "";
nameDB = query.value(0).toString();
if(nameDB == dbSettings.dbName)
{
flDBexist = true;
break;
}
}
}
}
else
{
qDebug() << "Ошибка подключения к PostreSQL.";
return false;
}
return flDBexist;
}
bool DataBaseLMS::createUser(QString name)
{
DataBaseSettings dbSett = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres");
dbCheck.setPassword("12345678");
dbCheck.setHostName(dbSett.dbHostName);
dbCheck.setPort(dbSett.dbPort);
if (dbCheck.open())
{
QString queryStr = QString("CREATE USER %1 WITH ENCRYPTED PASSWORD '%2'").arg(dbSett.dbUserName, dbSett.dbPassword);
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
qDebug() << "Пользователь создан.";
return true;
}
else
{
qDebug() << "Пользователь не создан.";
return false;
}
}
else
{
qDebug() << "Ошибка подключения к PostreSQL.";
return false;
}
}
bool DataBaseLMS::createDB(QString name)
{
DataBaseSettings dbSett = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName("postgres");
dbCheck.setPassword("12345678");
dbCheck.setHostName(dbSett.dbHostName);
dbCheck.setPort(dbSett.dbPort);
if (dbCheck.open())
{
//Создание БД
QString queryStr = QString("CREATE DATABASE %1").arg(dbSett.dbName);
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
qDebug() << "БД создана.";
//Залитие БД
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); // Ждать бесконечно, пока процесс не завершится
//Назначение владельца
QString queryStr = QString("ALTER DATABASE %1 OWNER TO %2").arg(dbSett.dbName, dbSett.dbUserName);
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
}
else
return false;
//return true;
}
else
{
qDebug() << "БД не создана.";
return false;
}
}
else
{
qDebug() << "Ошибка подключения к PostreSQL.";
return false;
}
dbCheck.close();
QSqlDatabase dbCheck2 = QSqlDatabase::addDatabase("QPSQL");
dbCheck2.setUserName("postgres");
dbCheck2.setPassword("12345678");
dbCheck2.setHostName(dbSett.dbHostName);
dbCheck2.setPort(dbSett.dbPort);
dbCheck2.setDatabaseName(dbSett.dbName);
if (dbCheck2.open())
{
QString newOwner = dbSett.dbUserName;
// Получаем список таблиц
QSqlQuery query(dbCheck2);
query.exec("SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public';");
while (query.next())
{
QString tableName = query.value(0).toString();
QString alterQuery = QString("ALTER TABLE %1 OWNER TO %2;").arg(tableName).arg(newOwner);
qDebug() << "Executing: " << alterQuery;
dbCheck2.exec(alterQuery);
/*
if (dbCheck2.exec(alterQuery))
{
qDebug() << "Error changing owner for table " << tableName << ":" << dbCheck2.lastError().text();
return false;
}*/
}
}
return true;
}
bool DataBaseLMS::createConnection()
{
dbSettings = getDataBaseSettings();