亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qsqltablemodel.cpp

?? QT 開發環境里面一個很重要的文件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtSql module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qsqltablemodel.h"#include "qsqldriver.h"#include "qsqlerror.h"#include "qsqlfield.h"#include "qsqlindex.h"#include "qsqlquery.h"#include "qsqlrecord.h"#include "qsqltablemodel_p.h"#include <qdebug.h>/*! \internal    Populates our record with values.*/QSqlRecord QSqlTableModelPrivate::record(const QVector<QVariant> &values) const{    QSqlRecord r = rec;    for (int i = 0; i < r.count() && i < values.count(); ++i)        r.setValue(i, values.at(i));    return r;}/*! \internal    Set a record for OnFieldChange and OnRowChange.*/bool QSqlTableModelPrivate::setRecord(int row, const QSqlRecord &record){    Q_Q(QSqlTableModel);    bool isOk = true;    QSqlTableModel::EditStrategy oldStrategy = strategy;    // FieldChange strategy makes no sense when setting an entire row    if (strategy == QSqlTableModel::OnFieldChange)        strategy = QSqlTableModel::OnRowChange;    for (int i = 0; i < record.count(); ++i) {        int idx = nameToIndex(record.fieldName(i));        if (idx == -1)            continue;        QModelIndex cIndex = q->createIndex(row, idx);        QVariant value = record.value(i);        QVariant oldValue = q->data(cIndex);        if (oldValue.isNull() || oldValue != value)            isOk &= q->setData(cIndex, value, Qt::EditRole);    }    if (isOk && oldStrategy == QSqlTableModel::OnFieldChange)        q->submitAll();    strategy = oldStrategy;    return isOk;}int QSqlTableModelPrivate::nameToIndex(const QString &name) const{    return rec.indexOf(name);}void QSqlTableModelPrivate::initRecordAndPrimaryIndex(){    rec = db.record(tableName);    primaryIndex = db.primaryIndex(tableName);}void QSqlTableModelPrivate::clear(){    editIndex = -1;    sortColumn = -1;    sortOrder = Qt::AscendingOrder;    tableName = QString();    editQuery.clear();    editBuffer.clear();    cache.clear();    primaryIndex.clear();    rec.clear();    filter.clear();}void QSqlTableModelPrivate::revertInsertedRow(){    Q_Q(QSqlTableModel);    if (insertIndex == -1)        return;    q->beginRemoveRows(QModelIndex(), insertIndex, insertIndex);    insertIndex = -1;    q->endRemoveRows();}void QSqlTableModelPrivate::clearEditBuffer(){    editBuffer = rec;}void QSqlTableModelPrivate::revertCachedRow(int row){    Q_Q(QSqlTableModel);    ModifiedRow r = cache.value(row);    switch (r.op) {    case QSqlTableModelPrivate::None:        Q_ASSERT_X(false, "QSqlTableModelPrivate::revertCachedRow()", "Invalid entry in cache map");        return;    case QSqlTableModelPrivate::Update:    case QSqlTableModelPrivate::Delete:        cache.remove(row);        emit q->dataChanged(q->createIndex(row, 0),                            q->createIndex(row, q->columnCount() - 1));        break;    case QSqlTableModelPrivate::Insert: {            QMap<int, QSqlTableModelPrivate::ModifiedRow>::Iterator it = cache.find(row);            if (it == cache.end())                return;            q->beginRemoveRows(QModelIndex(), row, row);            it = cache.erase(it);            while (it != cache.end()) {                int oldKey = it.key();                const QSqlTableModelPrivate::ModifiedRow oldValue = it.value();                cache.erase(it);                it = cache.insert(oldKey - 1, oldValue);                ++it;            }            q->endRemoveRows();        break; }    }}bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement,                                 const QSqlRecord &rec, const QSqlRecord &whereValues){    if (stmt.isEmpty())        return false;    // lazy initialization of editQuery    if (editQuery.driver() != db.driver())        editQuery = QSqlQuery(db);    if (prepStatement) {        if (editQuery.lastQuery() != stmt) {            if (!editQuery.prepare(stmt)) {                error = editQuery.lastError();                return false;            }        }        int i;        for (i = 0; i < rec.count(); ++i) {            if (rec.isGenerated(i) && rec.value(i).type() != QVariant::Invalid)                editQuery.addBindValue(rec.value(i));        }        for (i = 0; i < whereValues.count(); ++i) {            if (whereValues.isGenerated(i))                editQuery.addBindValue(whereValues.value(i));        }        if (!editQuery.exec()) {            error = editQuery.lastError();            return false;        }    } else {        if (!editQuery.exec(stmt)) {            error = editQuery.lastError();            return false;        }    }    return true;}QSqlRecord QSqlTableModelPrivate::primaryValues(int row){    QSqlRecord record;    if (!query.seek(row)) {        error = query.lastError();        return record;    }    if (primaryIndex.isEmpty()) {        record = rec;        for (int i = 0; i < record.count(); ++i)            record.setValue(i, query.value(i));    } else {        record = primaryIndex;        for (int i = 0; i < record.count(); ++i)            record.setValue(i, query.value(rec.indexOf(record.fieldName(i))));    }    return record;}/*!    \class QSqlTableModel    \brief The QSqlTableModel class provides an editable data model    for a single database table.    \ingroup database    \module sql    QSqlTableModel is a high-level interface for reading and writing    database records from a single table. It is build on top of the    lower-level QSqlQuery and can be used to provide data to view    classes such as QTableView. For example:    \quotefromfile snippets/sqldatabase/sqldatabase.cpp    \skipto QSqlTableModel_snippets    \skipto QSqlTableModel *model    \printuntil show()    We set the SQL table's name and the edit strategy, then we set up    the labels displayed in the view header. The edit strategy    dictates when the changes done by the user in the view are    actually applied to the database. The possible values are \l    OnFieldChange, \l OnRowChange, and \l OnManualSubmit.    QSqlTableModel can also be used to access a database    programmatically, without binding it to a view:    \skipto QSqlTableModel model    \printuntil QString name =    The code snippet above extracts the \c salary field from record 4 in    the result set of the query \c{SELECT * from employee}.    It is possible to set filters using setFilter(), or modify the    sort order using setSort(). At the end, you must call select() to    populate the model with data.    The \l{sql/tablemodel} example illustrates how to use    QSqlTableModel as the data source for a QTableView.    QSqlTableModel provides no direct support for foreign keys. Use    the QSqlRelationalTableModel and QSqlRelationalDelegate if you    want to resolve foreign keys.    \sa QSqlRelationalTableModel, QSqlQuery, {Model/View Programming},        {Table Model Example}, {Cached Table Example}*//*!    \fn QSqlTableModel::beforeDelete(int row)    This signal is emitted before the \a row is deleted.*//*!    \fn void QSqlTableModel::primeInsert(int row, QSqlRecord &record)    This signal is emitted when an insertion is initiated in the given    \a row. The \a record parameter can be written to (since it is a    reference), for example to populate some fields with default    values.*//*!    \fn QSqlTableModel::beforeInsert(QSqlRecord &record)    This signal is emitted before a new row is inserted. The    values that are about to be inserted are stored in \a record    and can be modified before they will be inserted.*//*!    \fn QSqlTableModel::beforeUpdate(int row, QSqlRecord &record)    This signal is emitted before the \a row is updated with the    values from \a record.    Note that only values that are marked as generated will be updated.    The generated flag can be set with \l QSqlRecord::setGenerated()    and checked with \l QSqlRecord::isGenerated().    \sa QSqlRecord::isGenerated()*//*!    Creates an empty QSqlTableModel and sets the parent to \a parent    and the database connection to \a db. If \a db is not valid, the    default database connection will be used.    The default edit strategy is \l OnRowChange.*/QSqlTableModel::QSqlTableModel(QObject *parent, QSqlDatabase db)    : QSqlQueryModel(*new QSqlTableModelPrivate, parent){    Q_D(QSqlTableModel);    d->db = db.isValid() ? db : QSqlDatabase::database();}/*!  \internal*/QSqlTableModel::QSqlTableModel(QSqlTableModelPrivate &dd, QObject *parent, QSqlDatabase db)    : QSqlQueryModel(dd, parent){    Q_D(QSqlTableModel);    d->db = db.isValid() ? db : QSqlDatabase::database();}/*!    Destroys the object and frees any allocated resources.*/QSqlTableModel::~QSqlTableModel(){}/*!    Sets the database table on which the model operates to \a    tableName. Does not select data from the table, but fetches its    field information.    To populate the model with the table's data, call select().    \sa select(), setFilter()*/void QSqlTableModel::setTable(const QString &tableName){    Q_D(QSqlTableModel);    clear();    d->tableName = tableName;    d->initRecordAndPrimaryIndex();}/*!    Returns the name of the currently selected table.*/QString QSqlTableModel::tableName() const{    Q_D(const QSqlTableModel);    return d->tableName;}/*!    Populates the model with data from the table that was set via setTable(), using the    specified filter and sort condition, and returns true if successful; otherwise    returns false.    \sa setTable(), setFilter(), selectStatement()*/bool QSqlTableModel::select(){    Q_D(QSqlTableModel);    QString query = selectStatement();    if (query.isEmpty())        return false;    revertAll();    QSqlQuery qu(query, d->db);    setQuery(qu);    if (!qu.isActive()) {        // something went wrong - revert to non-select state        d->initRecordAndPrimaryIndex();        return false;    }    return true;}/*!    \reimp*/QVariant QSqlTableModel::data(const QModelIndex &index, int role) const{    Q_D(const QSqlTableModel);    if (!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole))        return QVariant();    QModelIndex item = indexInQuery(index);    switch (d->strategy) {    case OnFieldChange:    case OnRowChange:        if (index.row() == d->insertIndex) {            QVariant val;            if (item.column() < 0 || item.column() >= d->rec.count())                return val;            val = d->editBuffer.value(index.column());            if (val.type() == QVariant::Invalid)                val = QVariant(d->rec.field(item.column()).type());            return val;        }        if (d->editIndex == item.row()) {            QVariant var = d->editBuffer.value(item.column());            if (var.isValid())                return var;        }        break;    case OnManualSubmit: {        const QSqlTableModelPrivate::ModifiedRow row = d->cache.value(index.row());        const QVariant var = row.rec.value(item.column());        if (var.isValid() || row.op == QSqlTableModelPrivate::Insert)            return var;        break; }    }    return QSqlQueryModel::data(item, role);}/*!    \reimp*/QVariant QSqlTableModel::headerData(int section, Qt::Orientation orientation, int role) const{    Q_D(const QSqlTableModel);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜婷婷国产麻豆精品| 国产精品伦一区二区三级视频| 国产精品一品二品| 久久99精品久久久久| 午夜不卡av免费| 天天综合日日夜夜精品| 性久久久久久久| 日日夜夜免费精品| 久久精品理论片| 久久精品国产久精国产爱| 免费久久99精品国产| 久久国产三级精品| 国产一区二区三区四| 国产高清精品在线| 成人激情免费网站| 色999日韩国产欧美一区二区| 91色婷婷久久久久合中文| 一本一本大道香蕉久在线精品| 色综合天天综合网国产成人综合天 | 日韩亚洲欧美高清| 精品国产91洋老外米糕| 国产日产亚洲精品系列| 国产精品二三区| 亚洲成人综合网站| 久久99精品国产| 91天堂素人约啪| 欧美日本精品一区二区三区| 日韩精品一区二区三区视频播放| 久久亚洲一级片| 中文字幕一区二区三区不卡在线| 一级做a爱片久久| 日本不卡一区二区三区高清视频| 国产在线观看一区二区| 99久久er热在这里只有精品66| 在线观看日韩一区| 久久色.com| 亚洲国产视频直播| 国产成人免费视频精品含羞草妖精 | 中文字幕 久热精品 视频在线| 综合在线观看色| 男女男精品视频网| 99久久777色| 国产亚洲欧美一级| 肉肉av福利一精品导航| 成人高清在线视频| 日韩一区二区精品葵司在线| 中文字幕色av一区二区三区| 麻豆国产精品官网| 欧美美女一区二区三区| 国产精品视频一二| 国产精品1区二区.| 精品久久人人做人人爽| 亚洲图片欧美色图| 99视频精品免费视频| 久久影院视频免费| 欧美96一区二区免费视频| 94-欧美-setu| 国产精品毛片无遮挡高清| 精品在线免费视频| 在线播放国产精品二区一二区四区 | 精品国产欧美一区二区| 亚洲国产精品久久一线不卡| 成人丝袜视频网| 精品国产三级电影在线观看| 日韩福利电影在线观看| 欧美日韩在线免费视频| 亚洲男人天堂一区| 91亚洲精品久久久蜜桃| 中文字幕不卡三区| 成人亚洲精品久久久久软件| 国产农村妇女精品| 国产最新精品精品你懂的| 欧美一区二区在线视频| 五月婷婷久久丁香| 欧美丰满嫩嫩电影| 日本va欧美va瓶| 日韩视频一区二区三区 | 久久9热精品视频| 日韩欧美高清一区| 国产米奇在线777精品观看| 精品国精品国产| 久久99国内精品| 久久综合色之久久综合| 国产精品影视在线观看| 久久精品视频一区| 床上的激情91.| 亚洲欧美日韩一区二区 | 欧美变态口味重另类| 国产在线观看一区二区 | 色狠狠综合天天综合综合| 亚洲人妖av一区二区| 在线免费观看一区| 日韩av午夜在线观看| 欧美videossexotv100| 色香蕉久久蜜桃| 亚洲成人777| 91精品国产麻豆国产自产在线| 蜜臀av一区二区在线免费观看 | 精品国产人成亚洲区| 国产69精品久久久久777| 亚洲色图另类专区| 欧美日韩国产首页| 国产精品99久久久| 亚洲精品日韩综合观看成人91| 欧美手机在线视频| 国模无码大尺度一区二区三区| 欧美精彩视频一区二区三区| 欧美这里有精品| 国内成人精品2018免费看| 国产精品乱码人人做人人爱| 欧美日韩大陆一区二区| 国产成人免费高清| 日韩精品一二三区| 中文字幕第一页久久| 91精品午夜视频| 色综合天天性综合| 激情综合网最新| 亚洲综合一区在线| 国产三级欧美三级日产三级99| 日本乱码高清不卡字幕| 国产精品一区二区你懂的| 亚洲国产综合视频在线观看| 日本一区二区高清| 日韩精品一区二区三区中文精品| av一本久道久久综合久久鬼色| 五月综合激情婷婷六月色窝| 国产精品第四页| 久久久久久久一区| 日韩午夜精品电影| 欧美性一区二区| 99精品桃花视频在线观看| 久久99国产精品成人| 亚洲一区二区影院| 国产视频一区二区在线| 欧美一区二区精品久久911| 91女人视频在线观看| 国产不卡在线播放| 激情欧美一区二区| 日韩电影在线看| 亚洲男人都懂的| 国产精品毛片无遮挡高清| 久久久久久久电影| 日韩欧美三级在线| 欧美精品第1页| 日本韩国欧美一区| 91蜜桃在线免费视频| 成人av免费网站| 成人高清免费观看| 国产成人精品亚洲日本在线桃色| 蜜臀精品一区二区三区在线观看 | 亚洲资源在线观看| 亚洲精品久久久久久国产精华液| 国产午夜精品在线观看| 久久久久久久久久看片| 欧美精品一区二| 久久综合色天天久久综合图片| 欧美一区二区在线播放| 欧美一级一级性生活免费录像| 欧美视频一区在线| 欧美日本精品一区二区三区| 91精品欧美福利在线观看| 欧美一级二级三级蜜桃| 日韩一级大片在线观看| 精品国产网站在线观看| 久久久综合激的五月天| 国产精品五月天| 亚洲最大色网站| 奇米色777欧美一区二区| 狠狠色丁香久久婷婷综合_中| 国产专区综合网| aaa国产一区| 欧美亚洲尤物久久| 91麻豆精品国产91久久久更新时间| 337p亚洲精品色噜噜| 2020国产精品久久精品美国| 中文字幕成人网| 亚洲一二三专区| 麻豆成人91精品二区三区| 国产盗摄女厕一区二区三区 | 一区二区三区欧美日| 日韩成人一级片| 成人午夜伦理影院| 欧美日韩午夜影院| wwwwww.欧美系列| 日韩毛片精品高清免费| 免费成人小视频| 不卡影院免费观看| 欧美日韩国产精选| 久久精品免视看| 亚洲国产视频a| 国产精品一二三四| 欧美在线不卡视频| 国产拍欧美日韩视频二区| 亚洲一区二区在线播放相泽| 国内久久婷婷综合| 欧美麻豆精品久久久久久| 久久久久久久综合狠狠综合| 亚洲不卡av一区二区三区| 国产成人免费在线| 日韩欧美国产成人一区二区|