Auf dieser Seite

QSqlResult Class

Die Klasse „QSqlResult“ bietet eine abstrakte Schnittstelle für den Zugriff auf Daten aus bestimmten SQL-Datenbanken. Mehr...

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

Öffentliche Funktionen

virtual ~QSqlResult()
virtual QVariant handle() const

Geschützte Typen

enum BindingSyntax { PositionalBinding, NamedBinding }

Geschützte Funktionen

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

Ausführliche Beschreibung

Normalerweise würden Sie „ QSqlQuery “ anstelle von „QSqlResult“ verwenden, da „ QSqlQuery “ einen generischen Wrapper für datenbankspezifische Implementierungen von „QSqlResult“ bereitstellt.

Wenn Sie einen eigenen SQL-Treiber implementieren (durch Unterklassenbildung von ` QSqlDriver`), müssen Sie eine eigene `QSqlResult`-Unterklasse bereitstellen, die alle rein virtuellen Funktionen sowie weitere virtuelle Funktionen implementiert, die Sie benötigen.

Siehe auch QSqlDriver.

Dokumentation zu Mitgliedstypen

enum QSqlResult::BindingSyntax

Dieser Enum-Typ legt die verschiedenen Syntaxvarianten für die Angabe von Platzhaltern in vorbereiteten Abfragen fest.

KonstanteWertBeschreibung
QSqlResult::PositionalBinding0Verwenden Sie die positionsbasierte Syntax im ODBC-Stil mit „?“ als Platzhaltern.
QSqlResult::NamedBinding1Verwende die Oracle-Syntax mit benannten Platzhaltern (z. B. „:id“)

Siehe auch bindingSyntax().

Dokumentation zu Mitgliedsfunktionen

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

Erstellt ein QSqlResult-Objekt unter Verwendung des Datenbanktreibers „ db “. Das Objekt wird in einem inaktiven Zustand initialisiert.

Siehe auch „ isActive()“ und „ driver()“.

[virtual noexcept] QSqlResult::~QSqlResult()

Löscht das Objekt und gibt alle zugewiesenen Ressourcen frei.

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

Weist den Wert „ val “ vom Parametertyp „ paramType “ der nächsten verfügbaren Position im aktuellen Datensatz (Zeile) zu.

Siehe auch bindValue().

[protected] int QSqlResult::at() const

Gibt die aktuelle (nullbasierte) Zeilenposition des Ergebnisses zurück. Kann die Sonderwerte „ QSql::BeforeFirstRow “ oder „ QSql::AfterLastRow “ zurückgeben.

Siehe auch setAt() und isValid().

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

Bindet den Wert „ val “ vom Parametertyp „ paramType “ an die Position „ index “ im aktuellen Datensatz (Zeile).

Siehe auch addBindValue().

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

Weist dem Namen „ placeholder “ im aktuellen Datensatz (Zeile) den Wert „ val “ vom Parametertyp „ paramType “ zu.

Hinweis: Das Binden eines undefinierten Platzhalters führt zu undefiniertem Verhalten.

Dies ist eine überladene Funktion.

Siehe auch ` QSqlQuery::bindValue()`.

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

Gibt den Parametertyp für den an der Position index gebundenen Wert zurück.

Siehe auch boundValue().

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

Gibt den Parametertyp für den Wert zurück, der mit dem angegebenen Namen „ placeholder “ verknüpft ist.

Dies ist eine überladene Funktion.

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

Gibt die von vorbereiteten Abfragen verwendete Bindungssyntax zurück.

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

Gibt den Wert zurück, der an der Position „ index “ im aktuellen Datensatz (Zeile) gespeichert ist.

Siehe auch ` bindValue()` und ` boundValues()`.

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

Gibt den Wert zurück, der im aktuellen Datensatz (Zeile) an den angegebenen Namen „ placeholder “ gebunden ist.

Dies ist eine überladene Funktion.

Siehe auch ` bindValueType()`.

[protected] int QSqlResult::boundValueCount() const

Gibt die Anzahl der gebundenen Werte im Ergebnis zurück.

Siehe auch „ boundValues()“.

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

Gibt den Namen des gebundenen Werts an der Position „ index “ im aktuellen Datensatz (Zeile) zurück.

Siehe auch „ boundValue()“ und „ boundValueNames()“.

[protected] QStringList QSqlResult::boundValueNames() const

Gibt die Namen aller gebundenen Werte zurück.

Siehe auch boundValue() und boundValueName().

[protected] QVariantList QSqlResult::boundValues() const

Gibt eine Liste der gebundenen Werte des Ergebnisses für den aktuellen Datensatz (Zeile) zurück.

Siehe auch ` boundValueCount()`.

[protected] QVariantList &QSqlResult::boundValues()

Gibt eine veränderbare Referenz auf die Liste der gebundenen Werte des Ergebnisses für den aktuellen Datensatz (Zeile) zurück.

Dies ist eine überladene Funktion.

Siehe auch „ boundValueCount()“.

[protected] void QSqlResult::clear()

Löscht die gesamte Ergebnismenge und gibt alle zugehörigen Ressourcen frei.

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

Gibt die Daten für das Feld „ index “ in der aktuellen Zeile als „ QVariant “ zurück. Diese Funktion wird nur aufgerufen, wenn sich das Ergebnis im aktiven Zustand befindet, auf einem gültigen Datensatz positioniert ist und „ index “ nicht negativ ist. Abgeleitete Klassen müssen diese Funktion neu implementieren und den Wert des Feldes „ index “ zurückgeben oder „QVariant()“, falls dieser nicht ermittelt werden kann.

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

Gibt den dem Ergebnis zugeordneten Treiber zurück. Dabei handelt es sich um das Objekt, das an den Konstruktor übergeben wurde.

[virtual protected] bool QSqlResult::exec()

Führt die Abfrage aus und gibt bei Erfolg „true“ zurück; andernfalls wird „false“ zurückgegeben.

Siehe auch ` prepare()`.

[protected] QString QSqlResult::executedQuery() const

Gibt die tatsächlich ausgeführte Abfrage zurück. Diese kann von der übergebenen Abfrage abweichen, beispielsweise wenn bei einer vorbereiteten Abfrage gebundene Werte verwendet wurden und die zugrunde liegende Datenbank vorbereitete Abfragen nicht unterstützt.

Siehe auch exec() und setQuery().

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

Positioniert das Ergebnis in einem beliebigen (nullbasierten) Zeilen index.

Diese Funktion wird nur aufgerufen, wenn sich das Ergebnis im aktiven Zustand befindet. Abgeleitete Klassen müssen diese Funktion neu implementieren und das Ergebnis in der Zeile index positionieren sowie setAt() mit einem geeigneten Wert aufrufen. Geben Sie „true“ zurück, um den Erfolg anzuzeigen, oder „false“, um einen Fehler zu signalisieren.

Siehe auch isActive(), fetchFirst(), fetchLast(), fetchNext() und fetchPrevious().

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

Setzt das Ergebnis auf den ersten Datensatz (Zeile 0) im Ergebnis.

Diese Funktion wird nur aufgerufen, wenn sich das Ergebnis im aktiven Zustand befindet. Abgeleitete Klassen müssen diese Funktion neu implementieren, das Ergebnis auf den ersten Datensatz setzen und ` setAt()` mit einem geeigneten Wert aufrufen. Geben Sie `true` zurück, um den Erfolg anzuzeigen, oder `false`, um einen Fehler zu signalisieren.

Siehe auch ` fetch()` und ` fetchLast()`.

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

Setzt das Ergebnis auf den letzten Datensatz (letzte Zeile) im Ergebnis.

Diese Funktion wird nur aufgerufen, wenn sich das Ergebnis im aktiven Zustand befindet. Abgeleitete Klassen müssen diese Funktion neu implementieren, das Ergebnis auf den letzten Datensatz setzen und ` setAt()` mit einem geeigneten Wert aufrufen. Geben Sie `true` zurück, um den Erfolg anzuzeigen, oder `false`, um einen Fehler anzuzeigen.

Siehe auch ` fetch()` und ` fetchFirst()`.

[virtual protected] bool QSqlResult::fetchNext()

Setzt das Ergebnis auf den nächsten verfügbaren Datensatz (Zeile) im Ergebnis.

Diese Funktion wird nur aufgerufen, wenn sich das Ergebnis im aktiven Zustand befindet. Die Standardimplementierung ruft „ fetch()“ mit dem nächsten Index auf. Abgeleitete Klassen können diese Funktion neu implementieren und das Ergebnis auf andere Weise auf den nächsten Datensatz setzen sowie „ setAt()“ mit einem geeigneten Wert aufrufen. Geben Sie „true“ zurück, um den Erfolg anzuzeigen, oder „false“, um einen Fehler zu signalisieren.

Siehe auch ` fetch()` und ` fetchPrevious()`.

[virtual protected] bool QSqlResult::fetchPrevious()

Setzt das Ergebnis auf den vorherigen Datensatz (die vorherige Zeile) im Ergebnis.

Diese Funktion wird nur aufgerufen, wenn sich das Ergebnis in einem aktiven Zustand befindet. Die Standardimplementierung ruft ` fetch()` mit dem vorherigen Index auf. Abgeleitete Klassen können diese Funktion neu implementieren und das Ergebnis auf andere Weise auf den nächsten Datensatz setzen sowie ` setAt()` mit einem geeigneten Wert aufrufen. Geben Sie `true` zurück, um den Erfolg anzuzeigen, oder `false`, um einen Fehler anzuzeigen.

[virtual] QVariant QSqlResult::handle() const

Gibt das Low-Level-Datenbank-Handle für diese Ergebnismenge zurück, das in ein „ QVariant “ eingeschlossen ist, oder ein ungültiges „ QVariant “, falls kein Handle vorhanden ist.

Warnung: Verwenden Sie diese Funktion mit äußerster Vorsicht und nur, wenn Sie genau wissen, was Sie tun.

Warnung: Das hier zurückgegebene Handle kann zu einem veralteten Zeiger werden, wenn das Ergebnis geändert wird (beispielsweise, wenn Sie es löschen).

Warnung: Der Handle kann NULL sein, wenn das Ergebnis noch nicht ausgeführt wurde.

Warnung: PostgreSQL : Im „Forward-Only“-Modus kann sich das Handle von ` QSqlResult ` nach dem Aufruf von ` fetch()`, ` fetchFirst()`, ` fetchLast()`, ` fetchNext()`, ` fetchPrevious()` oder `nextResult()` ändern.

Das hier zurückgegebene Handle ist datenbankabhängig; Sie sollten den Typnamen der Variante abfragen, bevor Sie darauf zugreifen.

Dieses Beispiel ruft das Handle für ein SQLite-Ergebnis ab:

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) {
        // ...
    }
}

Dieser Codeausschnitt gibt das Handle für PostgreSQL oder MySQL zurück:

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) {
        // ...
        }
    }

Siehe auch QSqlDriver::handle().

[protected] bool QSqlResult::hasOutValues() const

Gibt „ true “ zurück, wenn mindestens einer der gebundenen Werte der Abfrage ein „ QSql::Out “ oder ein „ QSql::InOut “ ist; andernfalls wird „ false “ zurückgegeben.

Siehe auch bindValueType().

[protected] bool QSqlResult::isActive() const

Gibt „ true “ zurück, wenn das Ergebnis Datensätze enthält, die abgerufen werden sollen; andernfalls wird „ false “ zurückgegeben.

[protected] bool QSqlResult::isForwardOnly() const

Gibt „ true “ zurück, wenn man in der Ergebnismenge nur vorwärts blättern kann; andernfalls wird „ false “ zurückgegeben.

Siehe auch setForwardOnly().

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

Gibt „ true “ zurück, wenn das Feld an der Position „ index “ in der aktuellen Zeile null ist; andernfalls wird „ false “ zurückgegeben.

[protected] bool QSqlResult::isSelect() const

Gibt „ true “ zurück, wenn das aktuelle Ergebnis aus einer „ SELECT “-Anweisung stammt; andernfalls wird „ false “ zurückgegeben.

Siehe auch „ setSelect()“.

[protected] bool QSqlResult::isValid() const

Gibt „ true “ zurück, wenn der Cursor auf einem gültigen Datensatz positioniert ist (d. h., der Cursor befindet sich weder vor dem ersten noch nach dem letzten Datensatz); andernfalls wird „ false “ zurückgegeben.

Siehe auch at().

[protected] QSqlError QSqlResult::lastError() const

Gibt den letzten mit dem Ergebnis verbundenen Fehler zurück.

Siehe auch ` setLastError()`.

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

Gibt die Objekt-ID der zuletzt eingefügten Zeile zurück, sofern die Datenbank dies unterstützt. Ein ungültiger ` QVariant `-Wert wird zurückgegeben, wenn die Abfrage keinen Wert eingefügt hat oder wenn die Datenbank die ID nicht zurückmeldet. Wenn mehr als eine Zeile von der Einfügung betroffen war, ist das Verhalten undefiniert.

Beachten Sie, dass bei Oracle-Datenbanken die ROWID der Zeile zurückgegeben wird, während bei MySQL-Datenbanken das Auto-Increment-Feld der Zeile zurückgegeben wird.

Siehe auch QSqlDriver::hasFeature().

[protected] QString QSqlResult::lastQuery() const

Gibt den aktuellen SQL-Abfragetext zurück oder eine leere Zeichenkette, falls kein Text vorhanden ist.

Siehe auch ` setQuery()`.

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

Gibt die Anzahl der Zeilen zurück, die von der zuletzt ausgeführten Abfrage betroffen sind, oder -1, wenn diese nicht ermittelt werden kann oder wenn es sich bei der Abfrage um eine SELECT -Anweisung handelt.

Siehe auch ` size()`.

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

Bereitet die angegebene Abfrage ` query ` für die Ausführung vor; die Abfrage verwendet in der Regel Platzhalter, damit sie wiederholt ausgeführt werden kann. Gibt `true` zurück, wenn die Abfrage erfolgreich vorbereitet wurde; andernfalls wird ` false` zurückgegeben.

Siehe auch ` exec()`.

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

Gibt den aktuellen Datensatz zurück, wenn die Abfrage aktiv ist; andernfalls wird ein leeres ` QSqlRecord` zurückgegeben.

Die Standardimplementierung gibt immer ein leeres ` QSqlRecord` zurück.

Siehe auch ` isActive()`.

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

Legt fest, dass für den nachfolgenden Datenabruf die SQL-Anweisung „ query “ verwendet wird.

Abgeleitete Klassen müssen diese Funktion neu implementieren und die Abfrage ` query ` auf die Datenbank anwenden. Diese Funktion wird erst aufgerufen, nachdem das Ergebnis in einen inaktiven Zustand versetzt wurde, und wird vor dem ersten Datensatz des neuen Ergebnisses positioniert. Abgeleitete Klassen sollten `true` zurückgeben, wenn die Abfrage erfolgreich war und das Ergebnis einsatzbereit ist, andernfalls `false`.

Siehe auch ` setQuery()`.

[protected] void QSqlResult::resetBindCount()

Setzt die Anzahl der Bind-Parameter zurück.

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

Bereitet die angegebene Abfrage ` query` vor und nutzt dabei, soweit möglich, die zugrunde liegende Datenbankfunktionalität. Gibt ` true ` zurück, wenn die Abfrage erfolgreich vorbereitet wurde; andernfalls wird ` false` zurückgegeben.

Hinweis: Diese Methode hätte eigentlich „safePrepare()“ heißen sollen.

Siehe auch ` prepare()`.

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

Diese Funktion steht abgeleiteten Klassen zur Verfügung, um den internen Aktivitätsstatus auf „ active “ zu setzen.

Siehe auch ` isActive()`.

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

Diese Funktion steht abgeleiteten Klassen zur Verfügung, um die interne (nullbasierte) Zeilenposition auf ` index` zu setzen.

Siehe auch ` at()`.

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

Setzt den „Forward-Only“-Modus auf „ forward “. Wenn „ forward “ auf „true“ gesetzt ist, ist zur Navigation durch die Ergebnisse nur „ fetchNext()“ zulässig. Der „Forward-Only“-Modus benötigt deutlich weniger Speicher, da die Ergebnisse nicht zwischengespeichert werden müssen. Standardmäßig ist diese Funktion deaktiviert.

Die Einstellung von „forward only“ auf „false“ ist eine Empfehlung an die Datenbank-Engine, die letztendlich entscheidet, ob eine Ergebnismenge nur vorwärts navigierbar oder scrollbar ist. „ isForwardOnly()“ gibt immer den korrekten Status der Ergebnismenge zurück.

Hinweis: Der Aufruf von `setForwardOnly` nach Ausführung der Abfrage führt im besten Fall zu unerwarteten Ergebnissen, im schlimmsten Fall zu Abstürzen.

Hinweis: Um sicherzustellen, dass die „Forward-Only“-Abfrage erfolgreich abgeschlossen wurde, sollte die Anwendung nicht nur nach Ausführung der Abfrage, sondern auch nach dem Durchlaufen der Abfrageergebnisse mit ` lastError()` auf Fehler prüfen.

Warnung: PostgreSQL : Führen Sie beim Durchlaufen der Abfrageergebnisse im „Forward-Only“-Modus keine anderen SQL-Befehle über dieselbe Datenbankverbindung aus. Dies führt zum Verlust der Abfrageergebnisse.

Siehe auch isForwardOnly(), fetchNext() und QSqlQuery::setForwardOnly().

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

Diese Funktion steht abgeleiteten Klassen zur Verfügung, um den letzten Fehler auf „ error “ zu setzen.

Siehe auch ` lastError()`.

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

Setzt die aktuelle Abfrage für das Ergebnis auf „ query “. Sie müssen die Funktion ` reset()` aufrufen, um die Abfrage in der Datenbank auszuführen.

Siehe auch „ reset()“ und „ lastQuery()“.

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

Diese Funktion steht abgeleiteten Klassen zur Verfügung, um anzugeben, ob es sich bei der aktuellen Anweisung um eine SQL- SELECT -Anweisung handelt oder nicht. Der Parameter „ select “ sollte den Wert „true“ annehmen, wenn es sich bei der Anweisung um eine „ SELECT “-Anweisung handelt; andernfalls sollte er den Wert „false“ annehmen.

Siehe auch ` isSelect()`.

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

Gibt die Größe des Ergebnisses von „ SELECT “ zurück oder -1, wenn diese nicht ermittelt werden kann oder wenn es sich bei der Abfrage nicht um eine „ SELECT “-Anweisung handelt.

Siehe auch ` numRowsAffected()`.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.