QSqlTableModel,使用简单教程。

2015-05-12发布0条评论

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"

intmain(intargc,char*argv[])

{

   QApplicationa(argc,argv);

  //MainWindoww;

   //w.show();

   QSqlDatabasedb=QSqlDatabase::addDatabase("QODBC");

   db.setDatabaseName("DRIVER={MicrosoftAccessDriver(*.mdb)};FIL={MSAccess};DBQ=barcode.mdb;UID='';PWD=''");

   bool ok=db.open();

   if(ok)

   {

       qDebug()<<"connectok!";

   }

   else

   {

       qDebug()<<"connecterror!";

       returnfalse;

   }

   returna.exec();

}

2-----执行sql查询,条件显示,排序

查询:

model=newQSqlTableModel(this);
model->setTable(“student”);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();//选取整个表的所有行
//model->removeColumn(1);//不显示第二列,如果这时添加记录,则该属性的值添加不上

QTableView*view=newQTableView;

       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(); 

Qrecordrecord=QSqlRecordrecord=tablemodel.record(记录行数); 

值=Record.value(“字段名或索引”)

字段数:

字段值:

 

4------新增,修改,删除,提交,撤销

新增:

   introwNum=model->rowCount();//获得表的行数
  intid=10;
   model->insertRow(rowNum);//添加一行
   model->setData(model->index(rowNum,0),id);
   //model->submitAll();//可以直接提交

或者用record添加

QSqlRecordrecord=tablemodel.record();

record.setValue("nam","new");

model.insertRecord(1,record);

 

修改:

首先用条件找到某一条记录

QSqlRecordrecord=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 
   "失败!"


删除:
   intcurRow=ui->tableView->currentIndex().row();
   //获取选中的行
   model->removeRow(curRow);
   //删除该行
   intok=QMessageBox::warning(this,tr(“删除当前行!”),tr(“你确定”
                                                          “删除当前行吗?”),
                        QMessageBox::Yes,QMessageBox::No);
   if(ok==QMessageBox::No)
   {
      model->revertAll();//如果不删除,则撤销
   }
   elsemodel->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------其它

 




heQSqlTableModelclassprovidesaneditabledatamodelforasingledatabasetable. More...

  1. <span class="preprocessor" style="color:rgb(64,64,64)">#include <QSqlTableModel></span>  

Inherits: QSqlQueryModel.

Inheritedby: QSqlRelationalTableModel.

PublicTypes

enumEditStrategy {OnFieldChange,OnRowChange,OnManualSubmit}

PublicFunctions


QSqlTableModel (QObject* parent =0,QSqlDatabase db =QSqlDatabase())
virtual~QSqlTableModel ()
QSqlDatabasedatabase ()const
EditStrategyeditStrategy ()const
intfieldIndex (constQString& fieldName )const
QStringfilter ()const
boolinsertRecord (int row,constQSqlRecord& record )
boolisDirty (constQModelIndex& index )const
QSqlIndexprimaryKey ()const
virtualvoidrevertRow (int row )
virtualboolselect ()
virtualvoidsetEditStrategy (EditStrategy strategy )
virtualvoidsetFilter (constQString& filter )
boolsetRecord (int row,constQSqlRecord& record )
virtualvoidsetSort (int column,Qt::SortOrder order )
virtualvoidsetTable (constQString& tableName )
QStringtableName ()const

ReimplementedPublicFunctions

virtualvoidclear ()
virtualQVariantdata (constQModelIndex& index,int role =Qt::DisplayRole)const
virtualQt::ItemFlagsflags (constQModelIndex& index )const
virtualQVariantheaderData (int section,Qt::Orientation orientation,int role =Qt::DisplayRole)const
virtualboolinsertRows (int row,int count,constQModelIndex& parent =QModelIndex())
virtualboolremoveColumns (int column,int count,constQModelIndex& parent =QModelIndex())
virtualboolremoveRows (int row,int count,constQModelIndex& parent =QModelIndex())
virtualintrowCount (constQModelIndex& parent =QModelIndex())const
virtualboolsetData (constQModelIndex& index,constQVariant& value,int role =Qt::EditRole)
virtualvoidsort (int column,Qt::SortOrder order )

PublicSlots

virtualvoidrevert ()
voidrevertAll ()
virtualboolsubmit ()
boolsubmitAll ()

Signals

voidbeforeDelete (int row )
voidbeforeInsert (QSqlRecord& record )
voidbeforeUpdate (int row,QSqlRecord& record )
voidprimeInsert (int row,QSqlRecord& record )

ProtectedFunctions

virtualbooldeleteRowFromTable (int row )
QModelIndexindexInQuery (constQModelIndex& item )const
virtualboolinsertRowIntoTable (constQSqlRecord& values )
virtualQStringorderByClause ()const
virtualQStringselectStatement ()const
voidsetPrimaryKey (constQSqlIndex& key )
voidsetQuery (constQSqlQuery& query )
virtualboolupdateRowInTable (int row,constQSqlRecord& values )