From 13dba8acaaca6ff00cc4ac7fc9bb97df78cfe4c9 Mon Sep 17 00:00:00 2001 From: Konstantin Davydov Date: Tue, 4 Jan 2022 14:41:01 +0300 Subject: [PATCH] 1 --- Databases_LW2/Databases_LW2.pro | 27 ++++++ Databases_LW2/editdbdialog.cpp | 67 +++++++++++++ Databases_LW2/editdbdialog.h | 46 +++++++++ Databases_LW2/editdbdialog.ui | 70 ++++++++++++++ Databases_LW2/main.cpp | 14 +++ Databases_LW2/signindialog.cpp | 46 +++++++++ Databases_LW2/signindialog.h | 31 ++++++ Databases_LW2/signindialog.ui | 164 ++++++++++++++++++++++++++++++++ 8 files changed, 465 insertions(+) create mode 100644 Databases_LW2/Databases_LW2.pro create mode 100644 Databases_LW2/editdbdialog.cpp create mode 100644 Databases_LW2/editdbdialog.h create mode 100644 Databases_LW2/editdbdialog.ui create mode 100644 Databases_LW2/main.cpp create mode 100644 Databases_LW2/signindialog.cpp create mode 100644 Databases_LW2/signindialog.h create mode 100644 Databases_LW2/signindialog.ui diff --git a/Databases_LW2/Databases_LW2.pro b/Databases_LW2/Databases_LW2.pro new file mode 100644 index 0000000..c2f386d --- /dev/null +++ b/Databases_LW2/Databases_LW2.pro @@ -0,0 +1,27 @@ +QT += core gui sql + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++11 + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + editdbdialog.cpp \ + main.cpp \ + signindialog.cpp + +HEADERS += \ + editdbdialog.h \ + signindialog.h + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +FORMS += \ + editdbdialog.ui \ + signindialog.ui diff --git a/Databases_LW2/editdbdialog.cpp b/Databases_LW2/editdbdialog.cpp new file mode 100644 index 0000000..9d0e7d3 --- /dev/null +++ b/Databases_LW2/editdbdialog.cpp @@ -0,0 +1,67 @@ +#include "editdbdialog.h" +#include "ui_editdbdialog.h" + +editDBDialog::editDBDialog(QSqlDatabase db_copy, QWidget *parent) : + db(db_copy), + QDialog(parent), + ui(new Ui::editDBDialog) +{ + ui->setupUi(this); + + refresh(); + +} + +editDBDialog::~editDBDialog() +{ + delete ui; +} + + +void editDBDialog::refresh() +{ + QStringList table_list = db.tables(); + for(QString* cur_table = table_list.begin(); cur_table != table_list.end(); ++cur_table) + { + ui->tablesList->addItem(*cur_table); + } +} + + +void editDBDialog::on_changeTableBtn_clicked() +{ + QSqlQueryModel *model = new QSqlQueryModel; + QSqlQuery *qry = new QSqlQuery(db); + QString qry_str = "SELECT * FROM "; + qry_str.append(ui->tablesList->currentItem()->text()); + qry->prepare(qry_str); + qry->exec(); + model->setQuery(*qry); + ui->curTableTV->setModel(model); +} + + +void editDBDialog::on_runQueryBtn_clicked() +{ + QString qry_str = ui->queryWnd->toPlainText(); + QSqlQuery *qry = new QSqlQuery(db); + if (qry->exec(qry_str)) + { + ui->queryHistory->append(qry_str); + refresh(); + QSqlQueryModel *model = new QSqlQueryModel(); + model->setQuery(*qry); + ui->curTableTV->setModel(model); + } + else + { + QMessageBox::warning(this, "Failed to execute query", "Query is wrong! Check it and try again."); + } +} + + +void editDBDialog::on_clearBtn_clicked() +{ + ui->queryWnd->clear(); +} + diff --git a/Databases_LW2/editdbdialog.h b/Databases_LW2/editdbdialog.h new file mode 100644 index 0000000..b4f7a81 --- /dev/null +++ b/Databases_LW2/editdbdialog.h @@ -0,0 +1,46 @@ +#ifndef EDITDBDIALOG_H +#define EDITDBDIALOG_H + +#include +#include +#include +#include +#include + + +namespace Ui { +class editDBDialog; +} + +class editDBDialog : public QDialog +{ + Q_OBJECT + +public: + explicit editDBDialog(QSqlDatabase db, QWidget *parent = nullptr); + ~editDBDialog(); + + void refresh(); + +private slots: + void on_changeTableBtn_clicked(); + + void on_runQueryBtn_clicked(); + + void on_clearBtn_clicked(); + +private: + Ui::editDBDialog *ui; + QSqlDatabase db; +}; + +#endif // EDITDBDIALOG_H + +/* + CREATE TABLE agents(name TEXT, surname TEXT, age INT); + INSERT INTO agents VALUES ('Alex', 'Mason', 41), + ('Frank', 'Woods', 37); + UPDATE agents + SET age = 38 + WHERE name = 'Frank' +*/ diff --git a/Databases_LW2/editdbdialog.ui b/Databases_LW2/editdbdialog.ui new file mode 100644 index 0000000..8ae38fd --- /dev/null +++ b/Databases_LW2/editdbdialog.ui @@ -0,0 +1,70 @@ + + + editDBDialog + + + + 0 + 0 + 738 + 287 + + + + Dialog + + + + + + + + + + + + + + + + + + + + + + + + + + + + Change table + + + + + + + Run query + + + + + + + Clear + + + + + + + + + + + + + + diff --git a/Databases_LW2/main.cpp b/Databases_LW2/main.cpp new file mode 100644 index 0000000..360a9bc --- /dev/null +++ b/Databases_LW2/main.cpp @@ -0,0 +1,14 @@ +#include +#include "signindialog.h" +#include "editdbdialog.h" + + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + signInDialog wnd; + //editDBDialog DB_wnd; + wnd.show(); + + return a.exec(); +} diff --git a/Databases_LW2/signindialog.cpp b/Databases_LW2/signindialog.cpp new file mode 100644 index 0000000..477ac49 --- /dev/null +++ b/Databases_LW2/signindialog.cpp @@ -0,0 +1,46 @@ +#include "signindialog.h" +#include "ui_signindialog.h" + +signInDialog::signInDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::signInDialog) +{ + ui->setupUi(this); +} + +signInDialog::~signInDialog() +{ + delete ui; +} + +void signInDialog::on_pushButton_clicked() +{ + /* + HostName: 195.19.32.74; + DatabaseName: fn1131_2021 + Port: 5432 + UserName: student + Password: bmstu + */ + db = QSqlDatabase::addDatabase("QPSQL"); + db.setHostName(ui->hostname_lineEdit->text()); + db.setDatabaseName(ui->databasename_lineEdit->text()); + db.setPort(ui->port_lineEdit->text().toInt()); + db.setUserName(ui->username_lineEdit->text()); + db.setPassword(ui->password_lineEdit->text()); + + if(!db.open()) + { + QMessageBox msgBox; + msgBox.setText("Failed to connect to database. Check inputed data."); + msgBox.setIcon(QMessageBox::Warning); + msgBox.exec(); + } + else + { + this->hide(); + DB_wnd = new editDBDialog(db, this); + DB_wnd->show(); + } +} + diff --git a/Databases_LW2/signindialog.h b/Databases_LW2/signindialog.h new file mode 100644 index 0000000..b20af61 --- /dev/null +++ b/Databases_LW2/signindialog.h @@ -0,0 +1,31 @@ +#ifndef SIGNINDIALOG_H +#define SIGNINDIALOG_H + +#include +#include +#include +#include "editdbdialog.h" + + +namespace Ui { +class signInDialog; +} + +class signInDialog : public QDialog +{ + Q_OBJECT + +public: + explicit signInDialog(QWidget *parent = nullptr); + ~signInDialog(); + +private slots: + void on_pushButton_clicked(); + +private: + Ui::signInDialog *ui; + QSqlDatabase db; + editDBDialog *DB_wnd; +}; + +#endif // SIGNINDIALOG_H diff --git a/Databases_LW2/signindialog.ui b/Databases_LW2/signindialog.ui new file mode 100644 index 0000000..0a841dc --- /dev/null +++ b/Databases_LW2/signindialog.ui @@ -0,0 +1,164 @@ + + + signInDialog + + + + 0 + 0 + 271 + 257 + + + + Dialog + + + + + + + + SIGN IN + + + Qt::AlignCenter + + + + + + + 47 + + + 0 + + + + + HostName + + + + + + + + + + + + 50 + + + + + Database + + + + + + + + + + + + 76 + + + + + Port + + + + + + + + + + + + 48 + + + + + Username + + + + + + + + + + + + 50 + + + + + Password + + + + + + + QLineEdit::Password + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + SIGN IN + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + -- GitLab