Qt QSqlTableModel 使用心得
連接數據庫
執行sql查詢,條件顯示,排序
獲取記錄數,列數以及記錄內容,字段內容
新增,修改,刪除,恢復
其它
1---------------連接數據庫(我用的access2003做實驗)
在.pro文件添加
QT +=SQL
win32:CONFIG+=console
------------------------MAIN.CPP---------------
#include <QtGui/QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QVariant>
#include <QString>
#include <QSqlTableModel>
#include <QTableView>
#include "mainwindow.h"
int main(intargc, char *argv[])
{
QApplication a(argc, argv);
// MainWindow w;
//w.show();
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft AccessDriver (*.mdb)};FIL={MS Access};DBQ=barcode.mdb;UID='';PWD=''");
bool ok = db.open();
if(ok)
{
qDebug()<<"connect ok!";
}
else
{
qDebug()<<"connect error!";
return false;
}
return a.exec();
}
2-----執行sql查詢,條件顯示,排序
查詢:
model = newQSqlTableModel(this);
model->setTable(“student”);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select(); //選取整個表的所有行
// model->removeColumn(1); //不顯示第二列,如果這時添加記錄,則該屬性的值添加不上
QTableView *view= new QTableView;
view->setModel(model);
view->show();
//View->setEditTriggers(QAbstractItemView::NoEditTriggers); 使其不可編輯
條件:(等價于SQL語句的where)
model->setFilter(QObject::tr(“name= ‘admin’”).arg(name)); //根據姓名進行篩選
model->select(); //顯示結果
排序:(等價于ORDERBY)
model->setSort(0,Qt::AscendingOrder); //id屬性,即第0列,升序排列
model->select();
model->setSort(0,Qt::DescendingOrder); //id屬性,即第0列,降序排
model->select();
3------獲取記錄數,列數以及記錄內容,字段內容
記錄數: Model->rowcount
記錄值:
值=model.record(num).value(1).toString();
Qrecord record= QSqlRecord record = tablemodel.record(記錄行數);
值=Record.value(“字段名或索引”)
字段數:
字段值:
4------新增,修改,刪除,提交,撤銷
新增:
int rowNum = model->rowCount();//獲得表的行數
int id = 10;
model->insertRow(rowNum); //添加一行
model->setData(model->index(rowNum,0),id);
//model->submitAll(); //可以直接提交
或者用record添加
QSqlRecord record = tablemodel.record();
record.setValue("nam","new");
model.insertRecord(1,record);
修改:
首先用條件找到某一條記錄
QSqlRecord record = tablemodel.record(num);
record.setValue("name",record.value("name").toString()+"2");
tablemodel.setRecord(num,record);
if(tablemodel.submitAll())
"成功!"
else
"失敗!"
或者用下面方法用setData()來修改,代碼如下:
model.setData(model.index(1,1),"new");
if(tablemodel.submitAll())
"成功!"
else
"失敗!"
刪除:
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(); //否則提交,在數據庫中刪除該行
如果沒有table
tablemodel.removeRows(起始行, 要刪除的總行數);
model.submitAll();
提交
model->database().transaction();//開始事務操作
if (model->submitAll()) {
model->database().commit();//提交
} else {
model->database().rollback();//回滾
QMessageBox::warning(this,tr(“tableModel”),
tr(“數據庫錯誤: %1″)
.arg(model->lastError().text()));
}
撤銷
model->revertAll();
5------其它
he QSqlTableModel class provides an editable data model for a single database table. More...
- <span class="preprocessor" style="color:#404040">#include <QSqlTableModel></span>
Inherits: QSqlQueryModel.
Inherited by: QSqlRelationalTableModel.
Public Types
enum | EditStrategy { OnFieldChange, OnRowChange, OnManualSubmit } |
Public Functions
Reimplemented Public Functions
virtual void | clear () |
virtual QVariant | data ( const QModelIndex & index, int role = Qt::DisplayRole ) const |
virtual Qt::ItemFlags | flags ( const QModelIndex & index ) const |
virtual QVariant | headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const |
virtual bool | insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) |
virtual bool | removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() ) |
virtual bool | removeRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) |
virtual int | rowCount ( const QModelIndex & parent = QModelIndex() ) const |
virtual bool | setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ) |
virtual void | sort ( int column, Qt::SortOrder order ) |
Public Slots
Signals
Protected Functions