#include "tableform.h" #include "ui_tableform.h" #include #include #include #include #include TableForm::TableForm(QWidget *parent) : QWidget(parent), ui(new Ui::TableForm) { QsciLexerSQL *lexer = new QsciLexerSQL(); lexer->setDefaultPaper(QColor(255, 255, 255)); lexer->setDefaultColor(QColor(0, 0, 0)); lexer->setDefaultFont(QFont("monospace")); for (int i = -1; i < 23; i++) { lexer->setPaper(QColor(255, 255, 255), i); //lexer->setDefaultColor(QColor(0, 0, 0)); lexer->setFont(QFont("monospace"), i); } ui->setupUi(this); ui->QueryTextEdit->setLexer(lexer); m_QueryModel = 0; } TableForm::~TableForm() { delete m_QueryModel; delete m_DataModel; delete ui; } void TableForm::changeEvent(QEvent *e) { QWidget::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } } void TableForm::setColumns() { QSqlQuery query; if (m_Database.driverName() == "QPSQL") { query = QSqlQuery("SELECT * FROM \"" + m_TableName + "\" LIMIT 1", m_Database); // SELECT column_name, column_default, is_nullable, data_type, character_maximum_length FROM information_schema.columns WHERE table_name = "" ORDER BY ordinal_position } else if (m_Database.driverName() == "MYSQL") { query = QSqlQuery("SELECT * FROM `" + m_TableName + "` LIMIT 1", m_Database); // SELECT COLUMN_NAME AS column_name, COLUMN_DEFAULT AS column_default, IS_NULLABLE AS is_nullable, DATA_TYPE AS data_type, CHARACTER_MAXIMUM_LENGTH AS character_maximum_length FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = "" ORDER BY ordinal_position } else if (m_Database.driverName() == "SQLITE") { query = QSqlQuery("SELECT * FROM '" + m_TableName + "'' LIMIT 1", m_Database); // SELECT } QSqlRecord record = query.record(); ui->StructureTableWidget->setRowCount(record.count()); for (int i = 0; i < record.count(); i++) { QSqlField field = record.field(i); QTableWidgetItem *nameItem = new QTableWidgetItem(field.name()); QString typeName = QVariant::typeToName(field.type()); QTableWidgetItem *typeItem = new QTableWidgetItem(typeName + " - " + QString::number(field.type())); QTableWidgetItem *sizeItem; if (field.length() >= 0) { sizeItem = new QTableWidgetItem(QString::number(field.length())); } else if (field.precision() >= 0) { sizeItem = new QTableWidgetItem(QString::number(field.precision())); } else { sizeItem = new QTableWidgetItem(""); } QTableWidgetItem *nullItem; if (field.requiredStatus() == 1) { nullItem = new QTableWidgetItem("not null"); } else if (field.requiredStatus() == 0) { nullItem = new QTableWidgetItem("nullable"); } else { nullItem = new QTableWidgetItem("unknown"); } ui->StructureTableWidget->setItem(i, 0, nameItem); ui->StructureTableWidget->setItem(i, 1, typeItem); ui->StructureTableWidget->setItem(i, 2, sizeItem); ui->StructureTableWidget->setItem(i, 3, nullItem); } ui->StructureTableWidget->resizeColumnsToContents(); } void TableForm::setTable(const QString connectionName, const QString tableName) { QMainWindow * mainWindow = qobject_cast(window()); if (mainWindow) { mainWindow->statusBar()->showMessage("Opening table \"" + tableName + "\"..."); } QCoreApplication::processEvents(); m_ConnectionName = connectionName; m_TableName = tableName; m_Database = QSqlDatabase::database(m_ConnectionName); this->setColumns(); m_DataModel = new QSqlTableModel(this, m_Database); m_DataModel->setTable(m_TableName); ui->DataTableView->setModel(m_DataModel); if (mainWindow) { mainWindow->statusBar()->clearMessage(); } } void TableForm::on_DataCommitAction_triggered() { if (m_DataModel) { m_DataModel->database().commit(); } ui->DataCommitAction->setEnabled(false); ui->DataRollbackAction->setEnabled(false); } void TableForm::on_DataRefreshAction_triggered() { QMainWindow * mainWindow = qobject_cast(window()); if (mainWindow) { mainWindow->statusBar()->showMessage("Fetching results from \"" + m_TableName + "\"..."); } m_DataModel->select(); ui->DataTableView->resizeColumnsToContents(); if (mainWindow) { mainWindow->statusBar()->clearMessage(); } } void TableForm::on_QueryRunAction_triggered() { QMainWindow * mainWindow = qobject_cast(window()); if (mainWindow) { mainWindow->statusBar()->showMessage("Running query..."); } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QCoreApplication::processEvents(); QString query = ""; if (m_QueryModel == 0) { m_QueryModel = new QSqlQueryModel; } if (ui->QueryTextEdit->hasSelectedText()) { query = ui->QueryTextEdit->selectedText(); } else { query = ui->QueryTextEdit->text(); } m_QueryModel->setQuery(query, m_Database); ui->ResultsTableView->setModel(m_QueryModel); ui->ResultsTableView->resizeColumnsToContents(); QApplication::restoreOverrideCursor(); if (mainWindow) { mainWindow->statusBar()->clearMessage(); } }