QSqlResult Class

QSqlResult クラスは、特定の SQL データベースからデータにアクセスするための抽象インターフェイスを提供します。詳細...

Header: #include <QSqlResult>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql

パブリック関数

virtual ~QSqlResult()
virtual QVariant handle() const

保護された型

enum BindingSyntax { PositionalBinding, NamedBinding }

保護された関数

QSqlResult(const QSqlDriver *db)
void addBindValue(const QVariant &val, QSql::ParamType paramType)
int at() const
virtual void bindValue(int index, const QVariant &val, QSql::ParamType paramType)
virtual void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)
QSql::ParamType bindValueType(int index) const
QSql::ParamType bindValueType(const QString &placeholder) const
QSqlResult::BindingSyntax bindingSyntax() const
QVariant boundValue(int index) const
QVariant boundValue(const QString &placeholder) const
int boundValueCount() const
QString boundValueName(int index) const
QStringList boundValueNames() const
QVariantList boundValues() const
QVariantList &boundValues()
void clear()
virtual QVariant data(int index) = 0
const QSqlDriver *driver() const
virtual bool exec()
QString executedQuery() const
virtual bool fetch(int index) = 0
virtual bool fetchFirst() = 0
virtual bool fetchLast() = 0
virtual bool fetchNext()
virtual bool fetchPrevious()
bool hasOutValues() const
bool isActive() const
bool isForwardOnly() const
virtual bool isNull(int index) = 0
bool isSelect() const
bool isValid() const
QSqlError lastError() const
virtual QVariant lastInsertId() const
QString lastQuery() const
virtual int numRowsAffected() = 0
virtual bool prepare(const QString &query)
virtual QSqlRecord record() const
virtual bool reset(const QString &query) = 0
void resetBindCount()
virtual bool savePrepare(const QString &query)
virtual void setActive(bool active)
virtual void setAt(int index)
virtual void setForwardOnly(bool forward)
virtual void setLastError(const QSqlError &error)
virtual void setQuery(const QString &query)
virtual void setSelect(bool select)
virtual int size() = 0

詳細説明

QSqlQuery QSqlQuery は QSqlResult のデータベース固有の実装に対する汎用ラッパーを提供するからです。

独自の SQL ドライバを (QSqlDriver をサブクラス化して) 実装する場合は、必要なすべての純粋仮想関数とその他の仮想関数を実装する独自の QSqlResult サブクラスを提供する必要があります。

QSqlDriverも参照してください

メンバ型のドキュメント

enum QSqlResult::BindingSyntax

この列挙型は、プリペアド・クエリでプレースホルダを指定するためのさまざまな構文を指定します。

定数説明
QSqlResult::PositionalBinding0プレースホルダとして "?" を使用する ODBC スタイルの位置指定構文を使用します。
QSqlResult::NamedBinding1Oracle 形式の構文を使用し、":id" をプレースホルダとして使用します。

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

メンバ関数ドキュメント

[explicit protected] QSqlResult::QSqlResult(const QSqlDriver *db)

データベース・ドライバdb を使用して QSqlResult を作成します。オブジェクトは非アクティブ状態に初期化されます。

isActive() およびdriver()も参照して ください。

[virtual noexcept] QSqlResult::~QSqlResult()

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

[protected] void QSqlResult::addBindValue(const QVariant &val, QSql::ParamType paramType)

パラメータ型paramType の値val を、現在のレコード (行) の次に使用可能な位置にバインドします。

bindValue()も参照

[protected] int QSqlResult::at() const

結果の現在の(ゼロベースの)行位置を返します。特別な値QSql::BeforeFirstRow またはQSql::AfterLastRow を返すことがあります。

setAt() およびisValid()も参照して ください。

[virtual protected] void QSqlResult::bindValue(int index, const QVariant &val, QSql::ParamType paramType)

パラメータ型paramType の値val を、現在のレコード (行) の位置index に結びつけます。

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

[virtual protected] void QSqlResult::bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)

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

パラメータ型paramType の値val を、現在のレコード(行)のplaceholder の名前にバインドします。

注意: 未定義のプレースホルダをバインドすると、未定義の動作になります。

QSqlQuery::bindValue()も参照してください

[protected] QSql::ParamType QSqlResult::bindValueType(int index) const

位置index にバインドされている値のパラメータ・タイプを返します。

boundValue() も参照

[protected] QSql::ParamType QSqlResult::bindValueType(const QString &placeholder) const

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

指定されたplaceholder 名でバインドされている値のパラメータ・タイプを返します。

[protected] QSqlResult::BindingSyntax QSqlResult::bindingSyntax() const

プリペアド・クエリで使用されるバインディング構文を返します。

[protected] QVariant QSqlResult::boundValue(int index) const

現在のレコード (行) の位置index にバインドされている値を返します。

bindValue() およびboundValues()も参照してください

[protected] QVariant QSqlResult::boundValue(const QString &placeholder) const

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

これはオーバーロードされた関数です。現在のレコード (行) 内で、指定されたplaceholder の名前にバインドされている値を返します。

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

[protected] int QSqlResult::boundValueCount() const

この関数は、結果内のバインドされた値の数を返します。

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

[protected] QString QSqlResult::boundValueName(int index) const

index 関数は、現在のレコード (行) の位置 にある結合値の名前を返します。

boundValue() およびboundValueNames() も参照

[protected] QStringList QSqlResult::boundValueNames() const

すべての結合値の名前を返します。

boundValue() およびboundValueName() も参照

[protected] QVariantList QSqlResult::boundValues() const

現在のレコード (行) に対する結果の結合値のリストを返します。

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

[protected] QVariantList &QSqlResult::boundValues()

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

現在のレコード (行) に対する結果の境界値のリストへの変更可能な参照を返します。

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

[protected] void QSqlResult::clear()

結果セット全体をクリアし、関連するリソースを解放します。

[pure virtual protected] QVariant QSqlResult::data(int index)

現在の行のフィールドindex のデータをQVariant として返します。 この関数は、結果がアクティブな状態で、有効なレコード上に配置され、index が負でない場合にのみ呼び出されます。派生クラスは、この関数を再実装し、フィールドindex の値を返すか、フィールド が判別できない場合は QVariant() を返す必要があります。

[protected] const QSqlDriver *QSqlResult::driver() const

結果に関連付けられたドライバを返します。これは、コンストラクタに渡されたオブジェクトです。

[virtual protected] bool QSqlResult::exec()

クエリを実行し、成功した場合は true を返し、失敗した場合は false を返します。

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

[protected] QString QSqlResult::executedQuery() const

実際に実行されたクエリを返します。これは、渡されたクエリとは異なる可能性があります。 たとえば、バインドされた値が準備されたクエリで使用され、基礎となるデータベースが準備されたクエリをサポートしていない場合などです。

exec() およびsetQuery()も参照

[pure virtual protected] bool QSqlResult::fetch(int index)

結果を任意の(ゼロベースの)行index に位置付けます。

この関数は、結果がアクティブな状態の場合にのみ呼び出されます。派生クラスは、この関数を再実装し、結果を行index に配置し、適切な値を指定してsetAt() を呼び出す必要があります。成功を示すにはtrueを返し、失敗を示すにはfalseを返します。

isActive()、fetchFirst()、fetchLast()、fetchNext()、およびfetchPrevious()も参照

[pure virtual protected] bool QSqlResult::fetchFirst()

結果を結果の最初のレコード(行 0)に位置づける。

この関数は、結果がアクティブな状態にある場合にのみ呼び出されます。派生クラスは、この関数を再実装し、結果を最初のレコードに位置付け、適切な値を指定してsetAt() を呼び出す必要があります。成功を示すにはtrueを返し、失敗を示すにはfalseを返します。

fetch() およびfetchLast()も参照

[pure virtual protected] bool QSqlResult::fetchLast()

結果の最後のレコード(最後の行)に結果を位置付けます。

この関数は、result がアクティブな状態の場合にのみ呼び出されます。派生クラスは、この関数を再実装し、結果を最後のレコードに位置付け、適切な値を指定してsetAt() を呼び出す必要があります。成功を示すにはtrueを返し、失敗を示すにはfalseを返します。

fetch() およびfetchFirst()も参照

[virtual protected] bool QSqlResult::fetchNext()

結果を、結果内で次に使用可能なレコード (行) に位置付けます。

この関数は、結果がアクティブな状態の場合にのみ呼び出されます。デフォルトの実装では、次のインデックスでfetch() を呼び出します。派生クラスでは、この関数を再実装して、他の方法で結果を次のレコードに位置付け、適切な値を指定してsetAt() を呼び出すことができます。成功した場合は true を返し、失敗した場合は false を返します。

fetch() およびfetchPrevious()も参照

[virtual protected] bool QSqlResult::fetchPrevious()

結果を、結果の前のレコード (行) に位置付けます。

この関数は、結果がアクティブな状態の場合にのみ呼び出されます。デフォルトの実装では、前のインデックスでfetch() を呼び出します。派生クラスは、この関数を再実装して、他の方法で結果を次のレコードに位置付け、適切な値でsetAt() を呼び出すことができます。成功した場合は true を返し、失敗した場合は false を返します。

[virtual] QVariant QSqlResult::handle() const

この結果セットの低レベルデータベースハンドルをQVariant でラップして返すか、ハンドルがない場合は無効なQVariant を返します。

警告: 何をやっているのかわかっている場合にのみ、細心の注意を払って使用してください。

警告 ここで返されるハンドルは、結果が変更された場合(例えば、それをクリアした場合)、古いポインタになる可能性があります。

警告 結果がまだ実行されていない場合、ハンドルはNULLになる可能性があります。

警告: 結果がまだ実行されていない場合、ハンドルはNULLになる可能性があります: PostgreSQL: 順方向のみのモードでは、fetch(),fetchFirst(),fetchLast(),fetchNext(),fetchPrevious(), nextResult() を呼び出した後、QSqlResult のハンドルが変更される可能性があります。

ここで返されるハンドルはデータベースに依存しているので、アクセスする前にバリアントの型名を問い合わせる必要があります。

この例は sqlite の結果のハンドルを取得します:

QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);

QVariant v = query.result()->handle();
if (v.isValid() && qstrcmp(v.typeName(), "sqlite3_stmt*") == 0) {
    // v.data() returns a pointer to the handle
    sqlite3_stmt *handle = *static_cast<sqlite3_stmt **>(v.data());
    if (handle) {
        // ...
    }
}

このスニペットは PostgreSQL または MySQL のハンドルを返します:

if (qstrcmp(v.typeName(), "PGresult*") == 0) {
    PGresult *handle = *static_cast<PGresult **>(v.data());
    if (handle) {
        // ...
        }
}

if (qstrcmp(v.typeName(), "MYSQL_STMT*") == 0) {
    MYSQL_STMT *handle = *static_cast<MYSQL_STMT **>(v.data());
    if (handle) {
        // ...
        }
    }

QSqlDriver::handle()も参照してください

[protected] bool QSqlResult::hasOutValues() const

クエリのバインド値の少なくとも1つがQSql::Out またはQSql::InOut の場合はtrue を返し、そうでない場合はfalse を返します。

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

[protected] bool QSqlResult::isActive() const

結果に取得すべきレコードがある場合はtrue を返し、そうでない場合はfalse を返します。

[protected] bool QSqlResult::isForwardOnly() const

結果セットを前方にしかスクロールできない場合はtrue を返し、そうでない場合はfalse を返します。

setForwardOnly()も参照

[pure virtual protected] bool QSqlResult::isNull(int index)

現在の行の位置index にあるフィールドが NULL の場合はtrue を返し、そうでない場合はfalse を返します。

[protected] bool QSqlResult::isSelect() const

現在の結果がSELECT 文によるものである場合はtrue を返し、そうでない場合はfalse を返します。

setSelect()も参照のこと

[protected] bool QSqlResult::isValid() const

false結果が有効なレコードに配置されている場合 (つまり、結果が最初のレコードの前または最後のレコードの後に配置されていない場合)、true を返します。

at()も参照のこと

[protected] QSqlError QSqlResult::lastError() const

結果に関連付けられた最後のエラーを返します。

setLastError() も参照

[virtual protected] QVariant QSqlResult::lastInsertId() const

オブジェクト ID データベースがサポートしている場合は、挿入された最新の行のオブジェクト ID を返します。クエリが値を挿入しなかったり、データベースが ID を返さなかったりした場合は、無効なQVariant が返されます。複数の行が挿入された場合の動作は未定義です。

Oracle データベースの場合は行の ROWID が返され、MySQL データベースの場合は行のオートインクリメントフィールドが返されることに注意してください。

QSqlDriver::hasFeature()も参照ください

[protected] QString QSqlResult::lastQuery() const

現在の SQL クエリ・テキストを返します。

setQuery()も参照 ください。

[pure virtual protected] int QSqlResult::numRowsAffected()

最後に実行されたクエリによって影響を受けた行の数を返します。判別できない場合やSELECT 文の場合は -1 を返します。

size()も参照

[virtual protected] bool QSqlResult::prepare(const QString &query)

指定されたquery を実行できるように準備します。クエリは通常、繰り返し実行できるようにプレースホルダを使用します。クエリが正常に準備された場合は true を返し、そうでない場合はfalse を返します。

exec()も参照

[virtual protected] QSqlRecord QSqlResult::record() const

クエリが有効な場合は現在のレコードを返し、そうでない場合は空のQSqlRecord を返します。

デフォルトの実装では、常に空のQSqlRecord を返します。

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

[pure virtual protected] bool QSqlResult::reset(const QString &query)

以降のデータ取得に SQL 文query を使用するように結果を設定します。

派生クラスはこの関数を再実装し、query をデータベースに適用する必要があります。この関数は、結果が非アクティブ状態に設定された後にのみ呼び出され、新しい結果の最初のレコードの前に配置されます。派生クラスは、クエリが成功し、使用できる状態になった場合はtrueを返し、そうでない場合はfalseを返す必要があります。

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

[protected] void QSqlResult::resetBindCount()

バインドパラメータの数をリセットします。

[virtual protected] bool QSqlResult::savePrepare(const QString &query)

指定されたquery を準備します。クエリの準備が成功した場合はtrue を返し、そうでない場合はfalse を返します。

注意: このメソッドは "safePrepare()" と呼ぶべきものでした。

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

[virtual protected] void QSqlResult::setActive(bool active)

この関数は、派生クラスが内部アクティブ状態をactive に設定するために用意されています。

isActive() も参照

[virtual protected] void QSqlResult::setAt(int index)

この関数は、派生クラスが内部の(ゼロベースの)行位置をindex に設定するために用意されています。

at() も参照

[virtual protected] void QSqlResult::setForwardOnly(bool forward)

forward forward が true の場合、結果のナビゲートには () だけが許可されます。前方のみモードでは、結果をキャッシュする必要がないため、必要なメモリが大幅に削減される。デフォルトでは、この機能は無効になっている。fetchNext

forward onlyをfalseに設定することはデータベースエンジンへの提案であり、結果セットをforward onlyにするかscrollableにするかの最終決定はデータベースエンジンが行います。isForwardOnly() は、常に結果セットの正しい状態を返します。

注意 : クエリの実行後に setForwardOnly をコールすると、予期しない結果が返され、最悪の場合はクラッシュします。

注意 : 前方のみのクエリが正常に完了したことを確認するために、アプリケーションは、クエリの実行後だけでなく、クエリの結果をナビゲートした後にも、lastError() にエラーがないかどうかをチェックする必要があります。

警告 PostgreSQLです:フォワード・オンリー・モードで問い合わせ結果を表示している間は、同じデータベース接続上で他のSQLコマンドを実行しないでください。これにより問い合わせ結果が失われます。

isForwardOnly()、fetchNext()、QSqlQuery::setForwardOnly()も参照してください

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

この関数は、派生クラスで最後のエラーをerror に設定するために用意されています。

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

[virtual protected] void QSqlResult::setQuery(const QString &query)

結果の現在のクエリをquery に設定します。データベース上でクエリを実行するには、reset() を呼び出す必要があります。

reset() およびlastQuery() も参照して ください。

[virtual protected] void QSqlResult::setSelect(bool select)

この関数は、現在の文が SQLSELECT 文であるかどうかを示すために派生クラスに提供されます。select パラメータは、文がSELECT 文である場合は true、そうでない場合は false を指定します。

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

[pure virtual protected] int QSqlResult::size()

SELECT の結果のサイズを返します。判別できない場合やクエリがSELECT 文でない場合は -1。

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

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