159 lines
4.7 KiB
C++
159 lines
4.7 KiB
C++
#include "tableform.h"
|
|
#include "ui_tableform.h"
|
|
|
|
#include <QSqlDatabase>
|
|
#include <QSqlTableModel>
|
|
#include <QSqlRecord>
|
|
#include <QSqlField>
|
|
#include <QTableWidgetItem>
|
|
#include <QMainWindow>
|
|
#include <QStatusBar>
|
|
#include <Qsci/qscilexersql.h>
|
|
|
|
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<QMainWindow*>(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<QMainWindow*>(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();
|
|
}
|