#include "tableform.h" #include "ui_tableform.h" #include #include #include #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::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); m_DataModel = new QSqlTableModel(this, m_Database); m_DataModel->setTable(m_TableName); m_DataModel->select(); ui->DataTableView->setModel(m_DataModel); ui->DataTableView->resizeColumnsToContents(); QSqlRecord record = m_DataModel->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; switch (field.type()) { case QVariant::String: typeName = "varchar"; break; case QVariant::Int: typeName = "integer"; break; case QVariant::Date: typeName = "date"; break; case QVariant::DateTime: typeName = "datetime"; break; case QVariant::Bool: typeName = "boolean"; break; case QVariant::ByteArray: typeName = "byte array"; break; case QVariant::LongLong: typeName = "bigint"; break; default: typeName = "unknown"; break; } QTableWidgetItem *typeItem = new QTableWidgetItem(typeName); QTableWidgetItem *sizeItem; if (field.length() >= 0) { sizeItem = new QTableWidgetItem(field.length()); } else if (field.precision() >= 0) { sizeItem = new QTableWidgetItem(field.precision()); } else { sizeItem = new QTableWidgetItem(""); } QTableWidgetItem *nullItem; if (field.requiredStatus()) { nullItem = new QTableWidgetItem("not null"); } else { nullItem = new QTableWidgetItem("nullable"); } 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(); 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() { m_DataModel->select(); ui->DataTableView->resizeColumnsToContents(); } 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(); }