#include "qsqlite.h"
#include "ui_qsqlite.h"
#include "database.h"
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlQuery>
#include <QMessageBox>
#include <QSqlError>
Qsqlite::Qsqlite(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Qsqlite)
{
ui->setupUi(this);
model = new QSqlTableModel(this);
model->setTable("student");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select(); //选取整个表的所有行
// model->removeColumn(1); //不显示name属性列,如果这时添加记录,则该属性的值添加不上
ui->tableView->setModel(model);
// ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //使其不可编辑
}
Qsqlite::~Qsqlite()
{
delete ui;
}
void Qsqlite::on_submitButton_clicked()
{
model->database().transaction(); //开始事务操作
if (model->submitAll()) {
model->database().commit(); //提交
} else {
model->database().rollback(); //回滚
QMessageBox::warning(this,tr("tableModel"),
tr("数据库错误: %1").arg(model->lastError().text()));
}
}
void Qsqlite::on_revertButton_clicked()
{
model->revertAll();
}
void Qsqlite::on_queryButton_clicked()
{
QString name = ui->lineEdit->text();
model->setFilter(QObject::tr("name = '%1'").arg(name)); //根据姓名进行筛选
model->select(); //显示结果
}
void Qsqlite::on_backButton_clicked()
{
model->setTable("student"); //重新关联表
model->select(); //这样才能再次显示整个表的内容
}
void Qsqlite::on_idUpButton_clicked()
{
model->setSort(0,Qt::AscendingOrder); //id属性,即第0列,升序排列
model->select();
}
void Qsqlite::on_idDownButton_clicked()
{
model->setSort(0,Qt::DescendingOrder);
model->select();
}
void Qsqlite::on_deleteButton_clicked()
{
int curRow = ui->tableView->currentIndex().row();
//获取选中的行
model->removeRow(curRow);
//删除该行
int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定"
"删除当前行吗?"),
QMessageBox::Yes,QMessageBox::No);
if(ok == QMessageBox::No)
{
model->revertAll(); //如果不删除,则撤销
}
else model->submitAll(); //否则提交,在数据库中删除该行
}
void Qsqlite::on_addButton_clicked()
{
int rowNum = model->rowCount(); //获得表的行数
int id = 10;
model->insertRow(rowNum); //添加一行
model->setData(model->index(rowNum,0),id);
//model->submitAll(); //可以直接提交
}