QSqlResult Class

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

Kopfzeile: #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

Detaillierte Beschreibung

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

Wenn Sie Ihren eigenen SQL-Treiber implementieren (indem Sie QSqlDriver unterklassifizieren), müssen Sie Ihre eigene QSqlResult-Unterklasse bereitstellen, die alle von Ihnen benötigten reinen virtuellen Funktionen und andere virtuelle Funktionen implementiert.

Siehe auch QSqlDriver.

Dokumentation der Mitgliedstypen

enum QSqlResult::BindingSyntax

Dieser Enum-Typ spezifiziert die verschiedenen Syntaxen für die Angabe von Platzhaltern in vorbereiteten Abfragen.

KonstanteWertBeschreibung
QSqlResult::PositionalBinding0Verwenden Sie die ODBC-ähnliche Positionssyntax, mit "?" als Platzhalter.
QSqlResult::NamedBinding1Verwenden Sie die Oracle-Syntax mit benannten Platzhaltern (z. B. ":id")

Siehe auch bindingSyntax().

Dokumentation der Mitgliedsfunktionen

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

Erzeugt ein QSqlResult mit dem Datenbanktreiber db. Das Objekt wird in einem inaktiven Zustand initialisiert.

Siehe auch isActive() und driver().

[virtual noexcept] QSqlResult::~QSqlResult()

Zerstört das Objekt und gibt alle zugewiesenen Ressourcen frei.

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

Bindet den Wert val des Parametertyps paramType an die nächste verfügbare Position im aktuellen Datensatz (Zeile).

Siehe auch bindValue().

[protected] int QSqlResult::at() const

Gibt die aktuelle (nullbasierte) Zeilenposition des Ergebnisses zurück. Kann die speziellen Werte 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 des Parametertyps 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)

Dies ist eine überladene Funktion.

Bindet den Wert val des Parametertyps paramType an den Namen placeholder im aktuellen Datensatz (Zeile).

Hinweis: Die Bindung eines undefinierten Platzhalters führt zu einem undefinierten Verhalten.

Siehe auch QSqlQuery::bindValue().

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

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

Siehe auch boundValue().

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

Dies ist eine überladene Funktion.

Gibt den Parametertyp für den mit dem angegebenen placeholder Namen gebundenen Wert zurück.

[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) gebunden ist.

Siehe auch bindValue() und boundValues().

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

Dies ist eine überladene Funktion.

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

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 Wertes 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()

Dies ist eine überladene Funktion.

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

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 in einem aktiven Zustand befindet und auf einem gültigen Datensatz positioniert ist und index nicht-negativ ist. Abgeleitete Klassen müssen diese Funktion reimplementieren und den Wert des Feldes index zurückgeben, oder QVariant(), wenn dieser nicht ermittelt werden kann.

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

Gibt den mit dem Ergebnis verbundenen Treiber zurück. Dies ist 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 Abfrage zurück, die tatsächlich ausgeführt wurde. Diese kann sich von der übergebenen Abfrage unterscheiden, z. B. wenn gebundene Werte mit einer vorbereiteten Abfrage verwendet wurden und die zugrunde liegende Datenbank keine vorbereiteten Abfragen unterstützt.

Siehe auch exec() und setQuery().

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

Positioniert das Ergebnis auf eine beliebige (nullbasierte) Zeile index.

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

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

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

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

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

Siehe auch fetch() und fetchLast().

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

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

Diese Funktion wird nur aufgerufen, wenn sich das Ergebnis in einem aktiven Zustand befindet. Abgeleitete Klassen müssen diese Funktion neu implementieren und das Ergebnis auf den letzten Datensatz positionieren und setAt() mit einem geeigneten Wert aufrufen. Geben Sie true zurück, um Erfolg zu melden, oder false, um Misserfolg zu signalisieren.

Siehe auch fetch() und fetchFirst().

[virtual protected] bool QSqlResult::fetchNext()

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

Diese Funktion wird nur aufgerufen, wenn sich das Ergebnis in einem 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 eine andere Weise auf den nächsten Datensatz positionieren und setAt() mit einem entsprechenden Wert aufrufen. Der Rückgabewert ist true, wenn die Funktion erfolgreich war, oder false, wenn sie fehlgeschlagen ist.

Siehe auch fetch() und fetchPrevious().

[virtual protected] bool QSqlResult::fetchPrevious()

Positioniert das Ergebnis auf den vorherigen Datensatz (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 eine andere Weise auf den nächsten Datensatz positionieren und setAt() mit einem entsprechenden Wert aufrufen. Der Rückgabewert true zeigt den Erfolg an, false bedeutet einen Fehler.

[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, wenn es kein Handle gibt.

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

Warnung: Das hier zurückgegebene Handle kann zu einem veralteten Zeiger werden, wenn das Ergebnis geändert wird (zum Beispiel, 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(), nextResult() ändern.

Das hier zurückgegebene Handle ist datenbankabhängig, Sie sollten den Typnamen der Variante abfragen, bevor Sie auf sie 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) {
        // ...
    }
}

Dieses Snippet 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 können; andernfalls wird false zurückgegeben.

[protected] bool QSqlResult::isForwardOnly() const

Gibt true zurück, wenn Sie nur vorwärts durch die Ergebnismenge blättern können; andernfalls wird false zurückgegeben.

Siehe auch setForwardOnly().

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

Gibt true zurück, wenn das Feld an 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 von einer SELECT -Anweisung stammt; andernfalls wird false zurückgegeben.

Siehe auch setSelect().

[protected] bool QSqlResult::isValid() const

Gibt true zurück, wenn das Ergebnis auf einem gültigen Datensatz steht (d. h. das Ergebnis steht nicht vor dem ersten oder 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, wenn die Datenbank dies unterstützt. Eine ungültige QVariant 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, wenn es keine gibt.

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 sie nicht ermittelt werden kann oder wenn die Abfrage eine SELECT -Anweisung ist.

Siehe auch size().

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

Bereitet die angegebene query für die Ausführung vor; die Abfrage wird normalerweise Platzhalter verwenden, 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 einen leeren QSqlRecord zurück.

Siehe auch isActive().

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

Legt das Ergebnis so fest, dass die SQL-Anweisung query für den nachfolgenden Datenabruf verwendet wird.

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

Siehe auch setQuery().

[protected] void QSqlResult::resetBindCount()

Setzt die Anzahl der Bindungsparameter zurück.

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

Bereitet die angegebene query vor, wobei die zugrunde liegende Datenbankfunktionalität verwendet wird, sofern möglich. Gibt true zurück, wenn die Abfrage erfolgreich vorbereitet wurde; andernfalls wird false zurückgegeben.

Hinweis: Diese Methode hätte "safePrepare()" heißen müssen.

Siehe auch prepare().

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

Diese Funktion wird für abgeleitete Klassen bereitgestellt, um den internen aktiven Zustand auf active zu setzen.

Siehe auch isActive().

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

Diese Funktion wird für abgeleitete Klassen bereitgestellt, um die interne (nullbasierte) Zeilenposition auf index zu setzen.

Siehe auch at().

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

Setzt den Modus "Nur Vorwärts" auf forward. Wenn forward wahr ist, ist nur fetchNext() für die Navigation in den Ergebnissen erlaubt. Der Modus "Nur Vorwärts" benötigt viel weniger Speicher, da die Ergebnisse nicht zwischengespeichert werden müssen. Standardmäßig ist diese Funktion deaktiviert.

Die Einstellung "nur vorwärts" auf "false" ist ein Vorschlag an die Datenbank-Engine, die das letzte Wort darüber hat, ob eine Ergebnismenge nur vorwärts oder scrollbar ist. isForwardOnly() wird immer den korrekten Status der Ergebnismenge zurückgeben.

Hinweis: Der Aufruf von setForwardOnly nach der Ausführung der Abfrage führt im besten Fall zu unerwarteten Ergebnissen und im schlimmsten Fall zum Absturz.

Hinweis: Um sicherzustellen, dass die Nur-Vorwärts-Abfrage erfolgreich abgeschlossen wurde, sollte die Anwendung lastError() nicht nur nach der Ausführung der Abfrage, sondern auch nach dem Navigieren in den Abfrageergebnissen auf einen Fehler überprüfen.

Warnung: PostgreSQL: Führen Sie während der Navigation in den Abfrageergebnissen im Forward-Only-Modus keine anderen SQL-Befehle auf derselben Datenbankverbindung aus. Dies führt dazu, dass die Abfrageergebnisse verloren gehen.

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

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

Diese Funktion wird für abgeleitete Klassen bereitgestellt, 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 reset() aufrufen, um die Abfrage in der Datenbank auszuführen.

Siehe auch reset() und lastQuery().

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

Diese Funktion wird für abgeleitete Klassen bereitgestellt, um anzuzeigen, ob die aktuelle Anweisung eine SQL SELECT -Anweisung ist oder nicht. Der Parameter select sollte true sein, wenn die Anweisung eine SELECT Anweisung ist; andernfalls sollte er false sein.

Siehe auch isSelect().

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

Gibt die Größe des SELECT Ergebnisses zurück, oder -1, wenn sie nicht ermittelt werden kann oder wenn die Abfrage keine SELECT Anweisung ist.

Siehe auch numRowsAffected().

© 2025 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.