iosql/tableform.cpp

185 lines
5.5 KiB
C++
Raw Permalink Normal View History

2011-06-24 11:05:56 +00:00
#include "tableform.h"
#include "ui_tableform.h"
2011-10-27 12:08:05 +00:00
#include <QtSql>
2011-06-24 11:05:56 +00:00
#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;
}
}
2011-10-27 12:08:05 +00:00
void TableForm::setColumns()
2011-06-24 11:05:56 +00:00
{
2011-10-27 12:08:05 +00:00
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();
2011-06-24 11:05:56 +00:00
ui->StructureTableWidget->setRowCount(record.count());
for (int i = 0; i < record.count(); i++)
{
QSqlField field = record.field(i);
QTableWidgetItem *nameItem = new QTableWidgetItem(field.name());
2011-10-27 12:08:05 +00:00
QString typeName = QVariant::typeToName(field.type());
QTableWidgetItem *typeItem = new QTableWidgetItem(typeName + " - " + QString::number(field.type()));
2011-06-24 11:05:56 +00:00
QTableWidgetItem *sizeItem;
if (field.length() >= 0)
{
2011-10-27 12:08:05 +00:00
sizeItem = new QTableWidgetItem(QString::number(field.length()));
2011-06-24 11:05:56 +00:00
}
else if (field.precision() >= 0)
{
2011-10-27 12:08:05 +00:00
sizeItem = new QTableWidgetItem(QString::number(field.precision()));
2011-06-24 11:05:56 +00:00
}
else
{
sizeItem = new QTableWidgetItem("");
}
QTableWidgetItem *nullItem;
2011-10-27 12:08:05 +00:00
if (field.requiredStatus() == 1)
2011-06-24 11:05:56 +00:00
{
nullItem = new QTableWidgetItem("not null");
}
2011-10-27 12:08:05 +00:00
else if (field.requiredStatus() == 0)
2011-06-24 11:05:56 +00:00
{
nullItem = new QTableWidgetItem("nullable");
}
2011-10-27 12:08:05 +00:00
else
{
nullItem = new QTableWidgetItem("unknown");
}
2011-06-24 11:05:56 +00:00
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();
2011-10-27 12:08:05 +00:00
}
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);
this->setColumns();
m_DataModel = new QSqlTableModel(this, m_Database);
m_DataModel->setTable(m_TableName);
ui->DataTableView->setModel(m_DataModel);
2011-06-24 11:05:56 +00:00
if (mainWindow)
2011-10-27 12:08:05 +00:00
{
2011-06-24 11:05:56 +00:00
mainWindow->statusBar()->clearMessage();
2011-10-27 12:08:05 +00:00
}
2011-06-24 11:05:56 +00:00
}
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()
{
2011-10-27 12:08:05 +00:00
QMainWindow * mainWindow = qobject_cast<QMainWindow*>(window());
if (mainWindow)
{
mainWindow->statusBar()->showMessage("Fetching results from \"" + m_TableName + "\"...");
}
2011-06-24 11:05:56 +00:00
m_DataModel->select();
ui->DataTableView->resizeColumnsToContents();
2011-10-27 12:08:05 +00:00
if (mainWindow)
{
mainWindow->statusBar()->clearMessage();
}
2011-06-24 11:05:56 +00:00
}
void TableForm::on_QueryRunAction_triggered()
{
QMainWindow * mainWindow = qobject_cast<QMainWindow*>(window());
if (mainWindow)
2011-10-27 12:08:05 +00:00
{
2011-06-24 11:05:56 +00:00
mainWindow->statusBar()->showMessage("Running query...");
2011-10-27 12:08:05 +00:00
}
2011-06-24 11:05:56 +00:00
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)
2011-10-27 12:08:05 +00:00
{
2011-06-24 11:05:56 +00:00
mainWindow->statusBar()->clearMessage();
2011-10-27 12:08:05 +00:00
}
2011-06-24 11:05:56 +00:00
}