• <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 米米 閱讀(5190) 評論(0)  編輯 收藏 引用 所屬分類: qt
            色8激情欧美成人久久综合电| 2021久久国自产拍精品| 久久WWW免费人成一看片| 中文字幕久久久久人妻| 国内精品伊人久久久久AV影院| 99久久国语露脸精品国产| 国产精品热久久无码av| 国内精品久久久久影院优| 久久久噜噜噜久久中文字幕色伊伊| 久久人人爽人人爽人人片AV不| 99热都是精品久久久久久| 国内精品伊人久久久久妇| 久久99精品久久久久久久久久| 99久久精品免费看国产免费| 免费精品久久天干天干| 久久久久久久尹人综合网亚洲| 麻豆久久久9性大片| 成人久久综合网| 香蕉久久夜色精品国产2020| 久久91亚洲人成电影网站| 一级做a爰片久久毛片毛片| 99久久久精品| 久久综合久久美利坚合众国| 99热成人精品免费久久| 久久久久久国产精品无码超碰| 四虎久久影院| 四虎国产精品免费久久久| 亚洲狠狠婷婷综合久久久久| 久久国产综合精品五月天| 午夜精品久久久久久毛片| 欧美久久久久久午夜精品| www.久久热| 一本色道久久88—综合亚洲精品| 国产激情久久久久影院老熟女免费 | 麻豆成人久久精品二区三区免费 | 国产精品无码久久久久久| 亚洲精品tv久久久久久久久久| 2020最新久久久视精品爱| 久久A级毛片免费观看| 99久久精品免费看国产一区二区三区 | 久久精品成人欧美大片|