QSqlQueryModel Class

QSqlQueryModel クラスは、SQL 結果セットの読み取り専用データモデルを提供します。詳細...

Header: #include <QSqlQueryModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Inherits: QAbstractTableModel
Inherited By:

QSqlTableModel

パブリック関数

QSqlQueryModel(QObject *parent = nullptr)
virtual ~QSqlQueryModel()
virtual void clear()
QSqlError lastError() const
const QSqlQuery &query() const
QSqlRecord record(int row) const
QSqlRecord record() const
(since 6.2) void setQuery(QSqlQuery &&query)
void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())

再実装パブリック関数

virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const override
virtual int columnCount(const QModelIndex &index = QModelIndex()) const override
virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const override
virtual void fetchMore(const QModelIndex &parent = QModelIndex()) override
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual QHash<int, QByteArray> roleNames() const override
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override

保護された関数

virtual QModelIndex indexInQuery(const QModelIndex &item) const
virtual void queryChange()
void setLastError(const QSqlError &error)

詳細説明

QSqlQueryModel は SQL 文を実行し、結果セットを走査するための高レベルインターフェイスです。これは低レベルのQSqlQuery の上に構築され、QTableView のようなビュークラスにデータを提供するために使用することができます。例えば

    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("SELECT name, salary FROM employee");
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
    QTableView *view = new QTableView;
    view->setModel(model);
    view->show();

モデルのクエリを設定し、ビューのヘッダに表示されるラベルを設定します。

QSqlQueryModel は、ビューにバインドすることなく、プログラムでデータベースにアクセスするために使用することもできます:

    QSqlQueryModel model;
    model.setQuery("SELECT name, salary FROM employee");
    int salary = model.record(4).value("salary").toInt();

上記のコードスニペットは、SELECT クエリの結果セットのレコード 4 からsalary フィールドを抽出しています。salary は2番目のカラム(またはカラムインデックス1)なので、最後の行を次のように書き換えることができます:

    int salary = model.data(model.index(4, 1)).toInt();

モデルはデフォルトでは読み取り専用です。このモデルを読み書きできるようにするには、サブクラス化してsetData() とflags() を再実装する必要があります。別の方法として、QSqlTableModel を使用することもできます。 は、単一のデータベース・テーブルをベースとした読み書き可能なモデルを提供します。

querymodel の例では、QSqlQueryModel を使用してクエリの結果を表示する方法を示しています。また、QSqlQueryModel をサブクラス化し、ユーザーに表示する前にデータの内容をカスタマイズする方法や、QSqlQueryModel に基づいて読み書きモデルを作成する方法も示しています。

データベースがクエリで選択された行の数を返さない場合、モデルは行をインクリメンタルにフェッチします。詳細はfetchMore() を参照してください。

QSqlTableModel,QSqlRelationalTableModel,QSqlQuery,Model/View Programming, およびQuery Model Exampleも参照して ください。

メンバ関数ドキュメント

[explicit] QSqlQueryModel::QSqlQueryModel(QObject *parent = nullptr)

与えられたparent で空の QSqlQueryModel を作成します。

[virtual noexcept] QSqlQueryModel::~QSqlQueryModel()

オブジェクトを破棄し、割り当てられたリソースを解放します。

clear()も参照してください

[override virtual] bool QSqlQueryModel::canFetchMore(const QModelIndex &parent = QModelIndex()) const

再インプリメント:QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.

データベースからさらに行を読み込むことが可能な場合にtrue を返します。これは、クエリのサイズを返さないデータベースにのみ影響します (QSqlDriver::hasFeature() を参照ください)。

parent は常に無効な でなければなりません。QModelIndex

fetchMore()も参照してください

[virtual] void QSqlQueryModel::clear()

モデルをクリアし、取得したリソースを解放します。

[override virtual] int QSqlQueryModel::columnCount(const QModelIndex &index = QModelIndex()) const

再実装:QAbstractItemModel::columnCount(const QModelIndex &parent) const.

[override virtual] QVariant QSqlQueryModel::data(const QModelIndex &item, int role = Qt::DisplayRole) const

再実装:QAbstractItemModel::data(const QModelIndex &index, int role) const.

指定されたitem およびrole の値を返します。

item が範囲外の場合やエラーが発生した場合は、無効なQVariant が返されます。

lastError()も参照してください

[override virtual] void QSqlQueryModel::fetchMore(const QModelIndex &parent = QModelIndex())

再実装:QAbstractItemModel::fetchMore(const QModelIndex &parent)。

データベースからより多くの行を取得します。これは、クエリのサイズを返さないデータベースにのみ影響します (QSqlDriver::hasFeature() を参照)。

結果セット全体のフェッチを強制するには、以下を使用します:

while (myModel->canFetchMore())
    myModel->fetchMore();

parent は常に無効な でなければなりません。QModelIndex

canFetchMore()も参照してください

[override virtual] QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const

再実装しています:QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const.

指定されたorientation のヘッダのsection にある、指定されたrole のヘッダデータを返します。

setHeaderData()も参照してください

[virtual protected] QModelIndex QSqlQueryModel::indexInQuery(const QModelIndex &item) const

モデル内の指定されたitem のデータベース結果セット内の値のインデックスを返します。

列や行が挿入、削除、移動されていない場合、返り値はitem と同じです。

item が範囲外の場合や、item が結果セット内の値を指していない場合は、無効なモデルインデックスを返します。

QSqlTableModel::indexInQuery()、insertColumns()、removeColumns()も参照して ください。

[override virtual] bool QSqlQueryModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())

再実装:QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent).

column の位置にcount の列をモデルに挿入します。モデルは親子関係をサポートしていないため、parent パラメータは常に無効なQModelIndex でなければなりません。

column が範囲内であればtrue を返し、そうでなければfalse を返します。

デフォルトでは、挿入された列は空です。挿入された列をデータで埋めるには、data() を再実装し、挿入された列を個別に処理します:

QVariant MyModel::data(const QModelIndex &item, int role) const
{
    if (item.column() == m_specialColumnNo) {
        // handle column separately
    }
    return QSqlQueryModel::data(item, role);
}

removeColumns()も参照

QSqlError QSqlQueryModel::lastError() const

データベースで最後に発生したエラーに関する情報を返します。

setLastError() およびquery() も参照

const QSqlQuery &QSqlQueryModel::query() const

このモデルに関連付けられた constQSqlQuery オブジェクトへの参照を返します。

setQuery() も参照して ください。

[virtual protected] void QSqlQueryModel::queryChange()

この仮想関数は、クエリが変更されるたびに呼び出されます。デフォルトの実装では何もしません。

query() は新しいクエリを返します。

query() およびsetQuery()も参照して ください。

QSqlRecord QSqlQueryModel::record(int row) const

現在のクエリのフィールドに関する情報を含むレコードを返します。row が有効な行のインデックスである場合、レコードにはその行の値が入力されます。

モデルが初期化されていない場合は、空のレコードが返されます。

QSqlRecord::isEmpty()も参照してください

QSqlRecord QSqlQueryModel::record() const

これはオーバーロードされた関数です。

現在のクエリのフィールドに関する情報を含む空のレコードを返します。

モデルが初期化されていない場合は、空のレコードが返されます。

QSqlRecord::isEmpty()も参照してください

[override virtual] bool QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())

再インプリメント:QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).

column の位置から始まるcount 列をモデルから削除します。モデルは親子関係をサポートしていないため、parent パラメータは常に無効なQModelIndex でなければなりません。

列を削除すると、列は効果的に非表示になります。QSqlQuery には影響しません。

列が削除された場合はtrue を返し、そうでない場合はfalse を返します。

[override virtual] QHash<int, QByteArray> QSqlQueryModel::roleNames() const

を返します:QAbstractItemModel::roleNames() const.

モデルのロール名を返します。

Qt はQSqlQueryModel に対して1つのロールのみを定義します:

QtロールQMLロール名
Qt::DisplayRole表示

[override virtual] int QSqlQueryModel::rowCount(const QModelIndex &parent = QModelIndex()) const

再実装:QAbstractItemModel::rowCount(const QModelIndex &parent) const.

データベースがクエリのサイズを返すことをサポートしている場合 (QSqlDriver::hasFeature() を参照)、現在のクエリの行数を返します。そうでない場合は、現在クライアントにキャッシュされている行数を返します。

parent は常に無効な でなければなりません。QModelIndex

canFetchMore() およびQSqlDriver::hasFeature()も参照

[override virtual] bool QSqlQueryModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)

再実装しています:QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role).

指定されたrole の水平ヘッダーのキャプションをvalue に設定します。これは、モデルがビューでデータを表示するために使用される場合に便利です(例えば、QTableView )。

orientationQt::Horizontal で、section が有効なセクションを参照している場合はtrue を返し、そうでない場合は false を返します。

モデルは読み取り専用なので、この関数を使用してデータベースの値を変更することはできないことに注意してください。

headerData() およびdata()も参照してください

[protected] void QSqlQueryModel::setLastError(const QSqlError &error)

派生クラスがデータベースで発生した最後のエラーの値をerror に設定できるようにする保護された関数です。

lastError() も参照して ください。

[since 6.2] void QSqlQueryModel::setQuery(QSqlQuery &&query)

モデルをリセットし、データ・プロバイダを指定されたquery に設定します。クエリはアクティブでなければならず、isForwardOnly() であってはならないことに注意してください。

lastError() を使用すると、クエリの設定にエラーがあった場合に詳細な情報を取得できます。

注意: setQuery() を呼び出すと、挿入されたカラムはすべて削除されます。

この関数は Qt 6.2 で導入されました。

query(),QSqlQuery::isActive(),QSqlQuery::setForwardOnly(),lastError()も参照してください

void QSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())

これはオーバーロードされた関数です。

与えられたデータベース接続db に対してクエリquery を実行します。データベースが指定されていない (または無効なデータベース) 場合は、既定の接続が使用されます。

lastError() を使用すると、クエリの設定にエラーがあった場合に詳細情報を取得できます。

例を示します:

QSqlQueryModel model;
model.setQuery("select * from MyTable");
if (model.lastError().isValid())
    qDebug() << model.lastError();

query()、queryChange()、lastError()も参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。