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: |
- 継承メンバを含む全メンバのリスト
- 非推奨メンバー
- QSqlQueryModel はデータベースクラスの一部です。
パブリック関数
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 )。
orientation がQt::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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。