• <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++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

            Qt  QSqlTableModel  使用心得

            連接數(shù)據(jù)庫(kù)

            執(zhí)行sql查詢,條件顯示,排序

            獲取記錄數(shù),列數(shù)以及記錄內(nèi)容,字段內(nèi)容

            新增,修改,刪除,恢復(fù)

            其它

             

             

            1---------------連接數(shù)據(jù)庫(kù)(我用的access2003做實(shí)驗(yàn))

            在.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-----執(zhí)行sql查詢,條件顯示,排序

            查詢:

            model = newQSqlTableModel(this);
            model->setTable(“student”);
            model->setEditStrategy(QSqlTableModel::OnManualSubmit);
            model->select(); //選取整個(gè)表的所有行
            // model->removeColumn(1); //不顯示第二列,如果這時(shí)添加記錄,則該屬性的值添加不上

            QTableView *view= new QTableView;

                    view->setModel(model);

                    view->show();

            //View->setEditTriggers(QAbstractItemView::NoEditTriggers);  使其不可編輯

            條件:(等價(jià)于SQL語(yǔ)句的where)

            model->setFilter(QObject::tr(“name= ‘admin’”).arg(name)); //根據(jù)姓名進(jìn)行篩選
                model->select(); //顯示結(jié)果

            排序:(等價(jià)于ORDERBY)
               model->setSort(0,Qt::AscendingOrder); //id屬性,即第0列,升序排列
               model->select();


                model->setSort(0,Qt::DescendingOrder); //id屬性,即第0列,降序排
                model->select();

            3------獲取記錄數(shù),列數(shù)以及記錄內(nèi)容,字段內(nèi)容

            記錄數(shù): Model->rowcount

            記錄值:

            值=model.record(num).value(1).toString(); 

            Qrecord record= QSqlRecord record = tablemodel.record(記錄行數(shù)); 

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

            字段數(shù):

            字段值:

             

            4------新增,修改,刪除,提交,撤銷

            新增:

                int rowNum = model->rowCount();//獲得表的行數(shù)
               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()來(lái)修改,代碼如下: 
            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(“刪除當(dāng)前行!”),tr(“你確定”
                                                                      “刪除當(dāng)前行嗎?”),
                                    QMessageBox::Yes,QMessageBox::No);
                if(ok == QMessageBox::No)
                {
                   model->revertAll();//如果不刪除,則撤銷
                }
                else model->submitAll(); //否則提交,在數(shù)據(jù)庫(kù)中刪除該行

            如果沒(méi)有table

            tablemodel.removeRows(起始行, 要?jiǎng)h除的總行數(shù)); 
            model.submitAll(); 


            提交  

                model->database().transaction();//開(kāi)始事務(wù)操作
                if (model->submitAll()) {
                    model->database().commit();//提交
                } else {
                    model->database().rollback();//回滾
                    QMessageBox::warning(this,tr(“tableModel”),
                                        tr(“數(shù)據(jù)庫(kù)錯(cuò)誤: %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 米米 閱讀(5200) 評(píng)論(0)  編輯 收藏 引用 所屬分類: qt
            99久久做夜夜爱天天做精品| 99久久精品日本一区二区免费| 久久久久久综合网天天| 91精品国产9l久久久久| 久久99精品久久久久久不卡| 久久精品成人免费网站| 国产精品一区二区久久精品| 国产亚洲色婷婷久久99精品| 久久久久久国产精品免费无码| 五月丁香综合激情六月久久| 亚洲色欲久久久综合网东京热| 久久亚洲高清综合| 成人亚洲欧美久久久久 | 久久久久亚洲AV无码专区体验| 久久毛片一区二区| 亚洲va久久久噜噜噜久久狠狠| 精品一二三区久久aaa片| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 日韩人妻无码精品久久久不卡| 丁香五月综合久久激情| 久久超乳爆乳中文字幕| 天天影视色香欲综合久久| 日本久久久精品中文字幕| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久精品人人做人人妻人人玩| 久久久久亚洲AV成人网| 狠狠狠色丁香婷婷综合久久五月| 久久国产欧美日韩精品| 精品久久久久久久久免费影院| 国产精品嫩草影院久久| 精品一区二区久久| 久久99国产精品二区不卡| 色欲综合久久中文字幕网| 18禁黄久久久AAA片| 青青久久精品国产免费看 | 夜夜亚洲天天久久| 久久精品国产亚洲网站| 久久久精品免费国产四虎| 国产99精品久久| 久久国产精品成人免费| 久久青草国产手机看片福利盒子|