• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            zhonghua

            C++博客 首頁 新隨筆 聯系 聚合 管理
              72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

            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...

            1. <span class="preprocessor" style="color:#404040">#include <QSqlTableModel></span>  

            Inherits: QSqlQueryModel.

            Inherited by: QSqlRelationalTableModel.

            Public Types

            enum EditStrategy { OnFieldChange, OnRowChange, OnManualSubmit }

            Public Functions

              QSqlTableModel ( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() )
            virtual ~QSqlTableModel ()
            QSqlDatabase database () const
            EditStrategy editStrategy () const
            int fieldIndex ( const QString & fieldName ) const
            QString filter () const
            bool insertRecord ( int row, const QSqlRecord & record )
            bool isDirty ( const QModelIndex & index ) const
            QSqlIndex primaryKey () const
            virtual void revertRow ( int row )
            virtual bool select ()
            virtual void setEditStrategy ( EditStrategy strategy )
            virtual void setFilter ( const QString & filter )
            bool setRecord ( int row, const QSqlRecord & record )
            virtual void setSort ( int column, Qt::SortOrder order )
            virtual void setTable ( const QString & tableName )
            QString tableName () const

            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

            virtual void revert ()
            void revertAll ()
            virtual bool submit ()
            bool submitAll ()

            Signals

            void beforeDelete ( int row )
            void beforeInsert ( QSqlRecord & record )
            void beforeUpdate ( int row, QSqlRecord & record )
            void primeInsert ( int row, QSqlRecord & record )

            Protected Functions

            virtual bool deleteRowFromTable ( int row )
            QModelIndex indexInQuery ( const QModelIndex & item ) const
            virtual bool insertRowIntoTable ( const QSqlRecord & values )
            virtual QString orderByClause () const
            virtual QString selectStatement () const
            void setPrimaryKey ( const QSqlIndex & key )
            void setQuery ( const QSqlQuery & query )
            virtual bool updateRowInTable ( int row, const QSqlRecord & values )
            posted on 2012-08-20 11:24 米米 閱讀(5191) 評論(0)  編輯 收藏 引用 所屬分類: qt
            人妻无码久久一区二区三区免费| 狠狠久久综合| 久久久久亚洲AV成人网人人网站| 久久线看观看精品香蕉国产| 99热成人精品热久久669| 久久精品天天中文字幕人妻 | 国产精品免费久久久久久久久| 亚洲中文字幕久久精品无码喷水| 久久天天躁狠狠躁夜夜avapp| 久久久久人妻一区二区三区| 精品国产乱码久久久久久呢| 久久天天躁狠狠躁夜夜avapp| 精品久久人妻av中文字幕| 狠狠狠色丁香婷婷综合久久五月 | 久久精品国产久精国产一老狼| 亚洲国产日韩欧美综合久久| 久久久无码精品亚洲日韩京东传媒 | 国产一久久香蕉国产线看观看| 97久久国产亚洲精品超碰热| 欧美伊香蕉久久综合类网站| 中文字幕久久欲求不满| 久久无码国产| 久久99精品久久久久久久不卡| 91精品国产91久久久久福利| 久久一区二区免费播放| 久久精品人妻中文系列| 99久久无码一区人妻a黑| 久久久久久极精品久久久| 精品久久亚洲中文无码| 四虎国产精品免费久久5151| 亚洲伊人久久综合中文成人网| 久久久久久国产精品免费无码| 品成人欧美大片久久国产欧美| 无码国内精品久久综合88| 国内精品久久久久久久97牛牛| 久久精品成人影院| 久久久久久久人妻无码中文字幕爆| 久久久久亚洲av毛片大| 99久久国产综合精品麻豆| 久久亚洲精品国产亚洲老地址| avtt天堂网久久精品|