• <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 米米 閱讀(5197) 評論(0)  編輯 收藏 引用 所屬分類: qt
            99精品国产免费久久久久久下载| 免费一级做a爰片久久毛片潮| 2021国产精品久久精品| 精产国品久久一二三产区区别| 亚洲伊人久久大香线蕉综合图片| 国产精品久久午夜夜伦鲁鲁| 粉嫩小泬无遮挡久久久久久| 久久久久无码精品| 久久婷婷五月综合色高清| 99久久99这里只有免费的精品| 国产亚州精品女人久久久久久| 奇米影视7777久久精品人人爽| 久久国产亚洲精品无码| 久久久久久av无码免费看大片| 一本久久a久久精品vr综合| 青青青青久久精品国产h| 久久婷婷国产剧情内射白浆| 久久精品国产亚洲av水果派 | 精品熟女少妇aⅴ免费久久| 伊人久久大香线蕉精品不卡| 国内精品久久九九国产精品| 老男人久久青草av高清| 欧美日韩精品久久久久| 国产99久久久国产精品~~牛| 日产精品久久久一区二区| 四虎影视久久久免费观看| segui久久国产精品| 久久精品无码一区二区无码| 久久久午夜精品福利内容| 久久久网中文字幕| 久久精品99无色码中文字幕| 99久久国产热无码精品免费久久久久| 久久精品国产久精国产一老狼| 久久精品亚洲乱码伦伦中文| 青青青青久久精品国产| 婷婷综合久久狠狠色99h| 久久国产精品无码HDAV| 久久亚洲精品成人av无码网站| 少妇无套内谢久久久久| 欧美精品九九99久久在观看| 婷婷久久综合九色综合九七|