Auf dieser Seite

QSqlTableModel Class

Die Klasse „QSqlTableModel“ stellt ein bearbeitbares Datenmodell für eine einzelne Datenbanktabelle bereit. Mehr...

Überschrift: #include <QSqlTableModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Erbt von: QSqlQueryModel
Vererbt an:

QSqlRelationalTableModel

Öffentliche Typen

enum EditStrategy { OnFieldChange, OnRowChange, OnManualSubmit }

Öffentliche Funktionen

QSqlTableModel(QObject *parent = nullptr, const QSqlDatabase &db = QSqlDatabase())
virtual ~QSqlTableModel()
QSqlDatabase database() const
QSqlTableModel::EditStrategy editStrategy() const
int fieldIndex(const QString &fieldName) const
QString filter() const
bool insertRecord(int row, const QSqlRecord &record)
bool isDirty(const QModelIndex &index) const
bool isDirty() const
QSqlIndex primaryKey() const
QSqlRecord record() const
QSqlRecord record(int row) const
virtual void revertRow(int row)
virtual void setEditStrategy(QSqlTableModel::EditStrategy strategy)
virtual void setFilter(const QString &filter)
bool setRecord(int row, const QSqlRecord &values)
virtual void setSort(int column, Qt::SortOrder order)
virtual void setTable(const QString &tableName)
QString tableName() const

Neu implementierte öffentliche Funktionen

virtual void clear() override
virtual bool clearItemData(const QModelIndex &index) override
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
virtual Qt::ItemFlags flags(const QModelIndex &index) const override
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
virtual void sort(int column, Qt::SortOrder order) override

Öffentliche Slots

virtual void revert() override
void revertAll()
virtual bool select()
virtual bool selectRow(int row)
virtual bool submit() override
bool submitAll()

Signale

void beforeDelete(int row)
void beforeInsert(QSqlRecord &record)
void beforeUpdate(int row, QSqlRecord &record)
void primeInsert(int row, QSqlRecord &record)

Geschützte Funktionen

virtual bool deleteRowFromTable(int row)
virtual bool insertRowIntoTable(const QSqlRecord &values)
virtual QString orderByClause() const
QSqlRecord primaryValues(int row) const
virtual QString selectStatement() const
void setPrimaryKey(const QSqlIndex &key)
virtual bool updateRowInTable(int row, const QSqlRecord &values)

Neu implementierte geschützte Funktionen

virtual QModelIndex indexInQuery(const QModelIndex &item) const override

Ausführliche Beschreibung

QSqlTableModel ist eine hochrangige Schnittstelle zum Lesen und Schreiben von Datenbankdatensätzen aus einer einzelnen Tabelle. Es baut auf dem untergeordneten „ QSqlQuery “ auf und kann verwendet werden, um Daten für Ansichtsklassen wie „ QTableView “ bereitzustellen. Beispiel:

    QSqlTableModel *model = new QSqlTableModel;
    model->setTable("employee");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

    QTableView *view = new QTableView;
    view->setModel(model);
    view->hideColumn(0); // don't show the ID
    view->show();

Wir legen den Namen der SQL-Tabelle und die Bearbeitungsstrategie fest und richten anschließend die in der View-Kopfzeile angezeigten Beschriftungen ein. Die Bearbeitungsstrategie legt fest, wann die vom Benutzer in der View vorgenommenen Änderungen tatsächlich auf die Datenbank übertragen werden. Mögliche Werte sind „ OnFieldChange “, „ OnRowChange “ und „ OnManualSubmit “.

QSqlTableModel kann auch verwendet werden, um programmgesteuert auf eine Datenbank zuzugreifen, ohne sie an eine Ansicht zu binden:

    QSqlTableModel model;
    model.setTable("employee");
    model.select();
    int salary = model.record(4).value("salary").toInt();

Der obige Codeausschnitt extrahiert das Feld „ salary “ aus Datensatz 4 im Ergebnis der Abfrage „ SELECT * from employee “.

Es ist möglich, Filter mit ` setFilter()` zu setzen oder die Sortierreihenfolge mit ` setSort()` zu ändern. Am Ende müssen Sie ` select()` aufrufen, um das Modell mit Daten zu füllen.

Das Beispiel „tablemodel“ veranschaulicht, wie man QSqlTableModel als Datenquelle für ein ` QTableView` verwendet.

QSqlTableModel bietet keine direkte Unterstützung für Fremdschlüssel. Verwenden Sie die Methoden „ QSqlRelationalTableModel “ und „ QSqlRelationalDelegate “, wenn Sie Fremdschlüssel auflösen möchten.

Siehe auch „ QSqlRelationalTableModel“ , „ QSqlQuery “, „Modell-/Ansichtsprogrammierung“, „Beispiel für ein Tabellenmodell“ und „Zwischengespeicherte SQL-Tabelle“.

Dokumentation zu Mitgliedstypen

enum QSqlTableModel::EditStrategy

Dieser Enum-Typ beschreibt, welche Strategie bei der Bearbeitung von Werten in der Datenbank gewählt werden soll.

KonstanteWertBeschreibung
QSqlTableModel::OnFieldChange0Alle Änderungen am Modell werden sofort auf die Datenbank übertragen.
QSqlTableModel::OnRowChange1Änderungen an einer Zeile werden erst übernommen, wenn der Benutzer eine andere Zeile auswählt.
QSqlTableModel::OnManualSubmit2Alle Änderungen werden im Modell zwischengespeichert, bis entweder ` submitAll()` oder ` revertAll()` aufgerufen wird.

Hinweis: Um zu verhindern, dass nur teilweise initialisierte Zeilen in die Datenbank eingefügt werden, verhält sich ` OnFieldChange ` bei neu eingefügten Zeilen wie ` OnRowChange `.

Siehe auch setEditStrategy().

Dokumentation zu Mitgliedsfunktionen

[explicit] QSqlTableModel::QSqlTableModel(QObject *parent = nullptr, const QSqlDatabase &db = QSqlDatabase())

Erstellt ein leeres QSqlTableModel und legt als übergeordnetes Element „ parent “ sowie als Datenbankverbindung „ db “ fest. Ist „ db “ ungültig, wird die Standard-Datenbankverbindung verwendet.

Die Standard-Bearbeitungsstrategie ist „ OnRowChange “.

[virtual noexcept] QSqlTableModel::~QSqlTableModel()

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

[signal] void QSqlTableModel::beforeDelete(int row)

Dieses Signal wird von „ deleteRowFromTable “ () ausgelöst, bevor „ row “ aus der derzeit aktiven Datenbanktabelle gelöscht wird.

[signal] void QSqlTableModel::beforeInsert(QSqlRecord &record)

Dieses Signal wird von „ insertRowIntoTable “ () ausgelöst, bevor eine neue Zeile in die aktuell aktive Datenbanktabelle eingefügt wird. Die Werte, die eingefügt werden sollen, sind in „ record “ gespeichert und können vor dem Einfügen geändert werden.

[signal] void QSqlTableModel::beforeUpdate(int row, QSqlRecord &record)

Dieses Signal wird von ` updateRowInTable()` ausgelöst, bevor die Spalte ` row ` in der aktuell aktiven Datenbanktabelle mit den Werten aus ` record` aktualisiert wird.

Beachten Sie, dass nur Werte aktualisiert werden, die als generiert markiert sind. Das Generierungsflag kann mit ` QSqlRecord::setGenerated()` gesetzt und mit ` QSqlRecord::isGenerated()` überprüft werden.

Siehe auch QSqlRecord::isGenerated().

[override virtual] void QSqlTableModel::clear()

Implementiert: QSqlQueryModel::clear().

[override virtual] bool QSqlTableModel::clearItemData(const QModelIndex &index)

Implementiert: ` QAbstractItemModel::clearItemData(const QModelIndex &index)`.

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

Implementiert neu: ` QSqlQueryModel::data(const QModelIndex &item, int role) const`.

Siehe auch setData().

QSqlDatabase QSqlTableModel::database() const

Gibt die Datenbankverbindung des Modells zurück.

[virtual protected] bool QSqlTableModel::deleteRowFromTable(int row)

Löscht das angegebene „ row “ aus der aktuell aktiven Datenbanktabelle.

Dies ist eine Low-Level-Methode, die direkt auf die Datenbank zugreift und nicht direkt aufgerufen werden sollte. Verwenden Sie „ removeRow()“ oder „ removeRows()“, um Werte zu löschen. Das Modell entscheidet je nach seiner Bearbeitungsstrategie, wann die Datenbank geändert wird.

Gibt „ true “ zurück, wenn die Zeile gelöscht wurde; andernfalls wird „ false “ zurückgegeben.

Siehe auch removeRow() und removeRows().

QSqlTableModel::EditStrategy QSqlTableModel::editStrategy() const

Gibt die aktuelle Bearbeitungsstrategie zurück.

Siehe auch „ setEditStrategy()“.

int QSqlTableModel::fieldIndex(const QString &fieldName) const

Gibt den Index des Feldes „ fieldName “ zurück oder -1, wenn im Modell kein entsprechendes Feld vorhanden ist.

QString QSqlTableModel::filter() const

Gibt den aktuell eingestellten Filter zurück.

Siehe auch setFilter() und select().

[override virtual] Qt::ItemFlags QSqlTableModel::flags(const QModelIndex &index) const

Implementiert neu: ` QAbstractTableModel::flags(const QModelIndex &index) const`.

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

Implementiert erneut: ` QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role) const`.

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

Umsetzt: ` QSqlQueryModel::indexInQuery(const QModelIndex &item) const`.

Gibt den Index des Werts in der Datenbank-Ergebnismenge für das angegebene ` item ` im Modell zurück.

Der Rückgabewert ist identisch mit ` item `, wenn keine Spalten oder Zeilen eingefügt, entfernt oder verschoben wurden.

Gibt einen ungültigen Modellindex zurück, wenn „ item “ außerhalb des zulässigen Bereichs liegt oder wenn „ item “ nicht auf einen Wert im Ergebnissatz verweist.

Siehe auch ` QSqlQueryModel::indexInQuery()`.

bool QSqlTableModel::insertRecord(int row, const QSqlRecord &record)

Fügt den Datensatz „ record “ an der Position „ row “ ein. Ist „ row “ negativ, wird der Datensatz am Ende angehängt. Ruft intern die Funktionen „ insertRows()“ und „ setRecord()“ auf.

Gibt „ true “ zurück, wenn der Datensatz eingefügt werden konnte, andernfalls „false“.

Änderungen werden bei „ OnFieldChange “ und „ OnRowChange “ sofort übermittelt. Bei einem Fehler wird keine neue Zeile im Modell hinterlassen.

Siehe auch insertRows(), removeRows() und setRecord().

[virtual protected] bool QSqlTableModel::insertRowIntoTable(const QSqlRecord &values)

Fügt die Werte values in die aktuell aktive Datenbanktabelle ein.

Dies ist eine Low-Level-Methode, die direkt auf die Datenbank zugreift und nicht direkt aufgerufen werden sollte. Verwenden Sie „ insertRow()“ und „ setData()“, um Werte einzufügen. Das Modell entscheidet je nach seiner Bearbeitungsstrategie, wann die Datenbank geändert wird.

Gibt ` true ` zurück, wenn die Werte eingefügt werden konnten, andernfalls `false`. Fehlerinformationen können mit ` lastError()` abgerufen werden.

Siehe auch lastError(), insertRow() und insertRows().

[override virtual] bool QSqlTableModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())

Implementiert: QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent).

Fügt count leere Zeilen an der Position row ein. Beachten Sie, dass parent ungültig sein muss, da dieses Modell keine Eltern-Kind-Beziehungen unterstützt.

Bei den Bearbeitungsstrategien „ OnFieldChange “ und „ OnRowChange “ darf jeweils nur eine Zeile eingefügt werden, und das Modell darf keine anderen zwischengespeicherten Änderungen enthalten.

Das Signal „ primeInsert()“ wird für jede neue Zeile ausgegeben. Verbinden Sie sich damit, wenn Sie die neue Zeile mit Standardwerten initialisieren möchten.

Es werden unabhängig von der Bearbeitungsstrategie keine Zeilen übermittelt.

Gibt „ false “ zurück, wenn die Parameter außerhalb des zulässigen Bereichs liegen oder die Zeile nicht eingefügt werden kann; andernfalls wird „ true “ zurückgegeben.

Siehe auch primeInsert() und insertRecord().

bool QSqlTableModel::isDirty(const QModelIndex &index) const

Gibt „ true “ zurück, wenn der Wert am Index „ index “ „dirty“ ist, andernfalls „false“. „Dirty“-Werte sind Werte, die im Modell geändert, aber noch nicht in die Datenbank geschrieben wurden.

Ist index ungültig oder verweist auf eine nicht vorhandene Zeile, wird „false“ zurückgegeben.

bool QSqlTableModel::isDirty() const

Gibt „ true “ zurück, wenn das Modell geänderte Werte enthält, die noch nicht in die Datenbank übernommen wurden; andernfalls „false“.

Dies ist eine überladene Funktion.

[virtual protected] QString QSqlTableModel::orderByClause() const

Gibt eine SQL- ORDER BY -Klausel zurück, die auf der aktuell festgelegten Sortierreihenfolge basiert.

Siehe auch ` setSort()` und ` selectStatement()`.

QSqlIndex QSqlTableModel::primaryKey() const

Gibt den Primärschlüssel der aktuellen Tabelle zurück oder ein leeres ` QSqlIndex `, wenn die Tabelle nicht festgelegt ist oder keinen Primärschlüssel hat.

Siehe auch ` setTable()`, ` setPrimaryKey()` und ` QSqlDatabase::primaryIndex()`.

[protected] QSqlRecord QSqlTableModel::primaryValues(int row) const

Gibt einen Datensatz zurück, dessen Felder im Primärschlüssel enthalten sind und deren Werte auf die unter row angegebenen Werte gesetzt sind. Ist kein Primärschlüssel definiert, enthält der zurückgegebene Datensatz alle Felder.

Siehe auch primaryKey().

[signal] void QSqlTableModel::primeInsert(int row, QSqlRecord &record)

Dieses Signal wird von ` insertRows()` ausgelöst, wenn ein Einfügevorgang in der angegebenen Spalte ` row ` der aktuell aktiven Datenbanktabelle initiiert wird. Der Parameter ` record ` kann beschrieben werden (da es sich um eine Referenz handelt), beispielsweise um einige Felder mit Standardwerten zu füllen und die generierten Flags der Felder zu setzen. Versuchen Sie nicht, den Datensatz während der Behandlung dieses Signals auf andere Weise zu bearbeiten, z. B. mit setData() oder setRecord().

QSqlRecord QSqlTableModel::record() const

Dies ist eine überladene Funktion.

Sie gibt einen leeren Datensatz zurück, der nur die Feldnamen enthält. Mit dieser Funktion können die Feldnamen eines Datensatzes abgerufen werden.

Siehe auch setRecord() und QSqlRecord::isEmpty().

QSqlRecord QSqlTableModel::record(int row) const

Gibt den Datensatz unter „ row “ im Modell zurück.

Wenn „ row “ der Index einer gültigen Zeile ist, wird der Datensatz mit den Werten dieser Zeile gefüllt.

Ist das Modell nicht initialisiert, wird ein leerer Datensatz zurückgegeben.

Siehe auch QSqlRecord::isEmpty().

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

Implementiert neu: QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent).

Entfernt die Spalten „ count “ aus dem Modell „ parent “, beginnend mit dem Index „ column “.

Gibt zurück, ob die Spalten erfolgreich entfernt wurden; andernfalls wird „ false “ zurückgegeben.

Siehe auch ` removeRows()`.

[override virtual] bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())

Implementiert: QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent).

Entfernt die Zeilen „ count “, beginnend bei „ row “. Da dieses Modell keine hierarchischen Strukturen unterstützt, muss „ parent “ ein ungültiger Modellindex sein.

Wenn die Bearbeitungsstrategie „ OnManualSubmit “ lautet, wird das Löschen von Zeilen aus der Datenbank verzögert, bis „ submitAll()“ aufgerufen wird.

Bei den Einstellungen „ OnFieldChange “ und „ OnRowChange “ darf jeweils nur eine Zeile gelöscht werden, und zwar nur, wenn für keine andere Zeile eine Änderung im Cache vorliegt. Löschvorgänge werden sofort an die Datenbank übermittelt. Das Modell behält für erfolgreich gelöschte Zeilen eine leere Zeile bei, bis es mit ` select()` aktualisiert wird.

Nach einer fehlgeschlagenen Löschung wird der Vorgang im Modell nicht rückgängig gemacht. Die Anwendung kann den Vorgang erneut übermitteln oder rückgängig machen.

Eingefügte, aber noch nicht erfolgreich übermittelte Zeilen im zu entfernenden Bereich werden sofort aus dem Modell entfernt.

Bevor eine Zeile aus der Datenbank gelöscht wird, wird das Signal „ beforeDelete()“ ausgelöst.

Wenn row < 0 oder row + count > rowCount() ist, wird keine Aktion ausgeführt und false zurückgegeben. Gibt true zurück, wenn alle Zeilen entfernt werden konnten; andernfalls wird false zurückgegeben. Detaillierte Informationen zu Datenbankfehlern können mit lastError() abgerufen werden.

Siehe auch removeColumns() und insertRows().

[override virtual slot] void QSqlTableModel::revert()

Umsetzt: QAbstractItemModel::revert().

Dieser neu implementierte Slot wird von den Item-Delegaten aufgerufen, wenn der Benutzer die Bearbeitung der aktuellen Zeile abgebrochen hat.

Macht die Änderungen rückgängig, wenn die Strategie des Modells auf „ OnRowChange “ oder „ OnFieldChange “ gesetzt ist. Führt bei der Strategie „ OnManualSubmit “ keine Aktion aus.

Verwenden Sie „ revertAll()“, um alle ausstehenden Änderungen für die Strategie „ OnManualSubmit “ rückgängig zu machen, oder „ revertRow()“, um eine bestimmte Zeile rückgängig zu machen.

Siehe auch „ submit()“, „ submitAll()“, „ revertRow()“ und „ revertAll()“.

[slot] void QSqlTableModel::revertAll()

Macht alle ausstehenden Änderungen rückgängig.

Siehe auch revert(), revertRow() und submitAll().

[virtual] void QSqlTableModel::revertRow(int row)

Macht alle Änderungen für die angegebene „ row “ rückgängig.

Siehe auch revert(), revertAll(), submit() und submitAll().

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

Implementiert: ` QSqlQueryModel::rowCount(const QModelIndex &parent) const`.

[virtual slot] bool QSqlTableModel::select()

Füllt das Modell mit Daten aus der Tabelle, die über ` setTable()` festgelegt wurde, unter Verwendung der angegebenen Filter- und Sortierbedingungen, und gibt bei Erfolg ` true ` zurück; andernfalls wird ` false` zurückgegeben.

Hinweis: Der Aufruf von `select()` macht alle noch nicht übermittelten Änderungen rückgängig und entfernt alle eingefügten Spalten.

Siehe auch „ setTable()“, „ setFilter()“ und „ selectStatement()“.

[virtual slot] bool QSqlTableModel::selectRow(int row)

Aktualisiert „ row “ im Modell mit Werten aus der entsprechenden Zeile der Datenbanktabelle, wobei anhand der Primärschlüsselwerte abgeglichen wird. Ohne Primärschlüssel müssen alle Spaltenwerte übereinstimmen. Wird keine passende Zeile gefunden, zeigt das Modell eine leere Zeile an.

Gibt bei Erfolg „ true “ zurück; andernfalls „ false “.

Siehe auch ` select()`.

[virtual protected] QString QSqlTableModel::selectStatement() const

Gibt die SQL-Anweisung „ SELECT “ zurück, die intern zum Befüllen des Modells verwendet wird. Die Anweisung enthält den Filter und die Klausel „ ORDER BY “.

Siehe auch ` filter()` und ` orderByClause()`.

[override virtual] bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)

Umsetzt: QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role).

Setzt die Daten für das Element „ index “ für die Rolle „ role “ auf „ value “.

Bei der Bearbeitungsstrategie „ OnFieldChange “ darf ein Index eine Änderung nur dann erhalten, wenn kein anderer Index eine zwischengespeicherte Änderung aufweist. Änderungen werden sofort übermittelt. Zeilen, die noch nicht in die Datenbank eingefügt wurden, können jedoch frei geändert werden und werden nicht automatisch übermittelt. Übermittelte Änderungen werden bei einem Fehler nicht rückgängig gemacht.

Bei der Strategie „ OnRowChange “ darf ein Index eine Änderung nur dann erhalten, wenn keine andere Zeile eine im Cache gespeicherte Änderung aufweist. Änderungen werden nicht automatisch übermittelt.

Gibt „ true “ zurück, wenn „ value “ dem aktuellen Wert entspricht. Der Wert wird jedoch nicht an die Datenbank übermittelt.

Gibt „ true “ zurück, wenn der Wert gesetzt werden konnte, oder „false“ im Fehlerfall, beispielsweise wenn „ index “ außerhalb des zulässigen Bereichs liegt.

Gibt „ false “ zurück, wenn die Rolle nicht „ Qt::EditRole “ ist. Um Daten für andere Rollen als „EditRole“ festzulegen, verwenden Sie entweder ein benutzerdefiniertes Proxy-Modell oder eine Unterklasse von „ QSqlTableModel “.

Siehe auch „ editStrategy()“, „ data()“, „ submit()“, „ submitAll()“ und „ revertRow()“.

[virtual] void QSqlTableModel::setEditStrategy(QSqlTableModel::EditStrategy strategy)

Legt die Strategie für die Bearbeitung von Werten in der Datenbank auf „ strategy “ fest.

Dadurch werden alle ausstehenden Änderungen rückgängig gemacht.

Siehe auch „ editStrategy()“ und „ revertAll()“.

[virtual] void QSqlTableModel::setFilter(const QString &filter)

Setzt den aktuellen Filter auf „ filter “.

Der Filter ist eine SQL- WHERE -Klausel ohne das Schlüsselwort „ WHERE “ (zum Beispiel „ name='Josephine') “.

Wenn das Modell bereits mit Daten aus einer Datenbank gefüllt ist, wählt das Modell diese mit dem neuen Filter erneut aus. Andernfalls wird der Filter beim nächsten Aufruf von ` select()` angewendet.

Siehe auch filter(), select(), selectStatement() und orderByClause().

[protected] void QSqlTableModel::setPrimaryKey(const QSqlIndex &key)

Geschützte Methode, die es Unterklassen ermöglicht, den Primärschlüssel auf „ key “ festzulegen.

Normalerweise wird der Primärindex automatisch gesetzt, sobald Sie ` setTable()` aufrufen.

Siehe auch „ primaryKey()“ und „ QSqlDatabase::primaryIndex()“.

bool QSqlTableModel::setRecord(int row, const QSqlRecord &values)

Wendet „ values “ auf das Feld „ row “ im Modell an. Die Quell- und Zielfelder werden anhand des Feldnamens zugeordnet, nicht anhand ihrer Position im Datensatz.

Beachten Sie, dass die in „ values “ generierten Flags beibehalten werden, um zu bestimmen, ob die entsprechenden Felder verwendet werden, wenn Änderungen an die Datenbank übermittelt werden. Standardmäßig ist für alle Felder in „ QSqlRecord “ der Wert „ true “ eingestellt. Sie müssen das Flag mithilfe von „ setGenerated “ (false) auf „ false “ setzen, damit Änderungen in „ values “ in der Datenbank gespeichert werden.

Bei den Bearbeitungsstrategien OnFieldChange und OnRowChange darf eine Zeile nur dann eine Änderung erhalten, wenn keine andere Zeile eine zwischengespeicherte Änderung aufweist. Änderungen werden sofort übermittelt. Übermittelte Änderungen werden bei einem Fehler nicht rückgängig gemacht.

Gibt „ true “ zurück, wenn alle Werte gesetzt werden konnten; andernfalls wird „false“ zurückgegeben.

Siehe auch record() und editStrategy().

[virtual] void QSqlTableModel::setSort(int column, Qt::SortOrder order)

Legt die Sortierreihenfolge für „ column “ auf „ order “ fest. Dies hat keine Auswirkungen auf die aktuellen Daten. Um die Daten mit der neuen Sortierreihenfolge zu aktualisieren, rufen Sie „ select()“ auf.

Siehe auch sort(), select() und orderByClause().

[virtual] void QSqlTableModel::setTable(const QString &tableName)

Legt die Datenbanktabelle, auf der das Modell arbeitet, auf „ tableName “ fest. Es werden keine Daten aus der Tabelle ausgewählt, sondern lediglich deren Feldinformationen abgerufen.

Um das Modell mit den Daten der Tabelle zu füllen, rufen Sie ` select()` auf.

Fehlerinformationen können mit ` lastError()` abgerufen werden.

Siehe auch „ select()“, „ setFilter()“ und „ lastError()“.

[override virtual] void QSqlTableModel::sort(int column, Qt::SortOrder order)

Implementiert: ` QAbstractItemModel::sort(int column, Qt::SortOrder order)`.

Sortiert die Daten nach column mit der Sortierreihenfolge order. Dadurch werden sofort Daten ausgewählt. Verwenden Sie setSort(), um eine Sortierreihenfolge festzulegen, ohne das Modell mit Daten zu füllen.

Siehe auch „ setSort()“, „ select()“ und „ orderByClause()“.

[override virtual slot] bool QSqlTableModel::submit()

Implementiert neu: QAbstractItemModel::submit().

Dieser neu implementierte Slot wird von den Element-Delegaten aufgerufen, wenn der Benutzer die Bearbeitung der aktuellen Zeile beendet hat.

Übermittelt die aktuell bearbeitete Zeile, wenn die Strategie des Modells auf „ OnRowChange “ oder „ OnFieldChange “ gesetzt ist. Führt bei der Strategie „ OnManualSubmit “ keine Aktion aus.

Verwenden Sie ` submitAll()` (), um alle ausstehenden Änderungen bei der Strategie ` OnManualSubmit ` zu übermitteln.

Gibt bei Erfolg „ true “ zurück; andernfalls „ false “. Verwenden Sie „ lastError()“, um detaillierte Fehlerinformationen abzufragen.

Das Modell wird nicht automatisch neu geladen. Übermittelte Zeilen werden bei Erfolg aus der Datenbank aktualisiert.

Siehe auch revert(), revertRow(), submitAll(), revertAll() und lastError().

[slot] bool QSqlTableModel::submitAll()

Übermittelt alle ausstehenden Änderungen und gibt bei Erfolg „ true “ zurück. Bei einem Fehler wird „ false “ zurückgegeben; detaillierte Fehlerinformationen können mit „ lastError()“ abgerufen werden.

Im Modus „ OnManualSubmit “ wird das Modell bei Erfolg neu geladen. Alle Ansichten, in denen es dargestellt wird, verlieren ihre Auswahl.

Hinweis: Im Modus „ OnManualSubmit “ werden bereits übermittelte Änderungen nicht aus dem Cache gelöscht, wenn „submitAll()“ fehlschlägt. Dadurch können Transaktionen zurückgesetzt und erneut übermittelt werden, ohne dass Daten verloren gehen.

Siehe auch „ revertAll()“ und „ lastError()“.

QString QSqlTableModel::tableName() const

Gibt den Namen der aktuell ausgewählten Tabelle zurück.

[virtual protected] bool QSqlTableModel::updateRowInTable(int row, const QSqlRecord &values)

Aktualisiert den angegebenen Wert „ row “ in der derzeit aktiven Datenbanktabelle mit dem angegebenen Wert „ values “. Gibt bei Erfolg „ true “ zurück; andernfalls wird „ false “ zurückgegeben.

Dies ist eine Low-Level-Methode, die direkt auf die Datenbank zugreift und nicht direkt aufgerufen werden sollte. Verwenden Sie „ setData()“, um Werte zu aktualisieren. Das Modell entscheidet je nach seiner Bearbeitungsstrategie, wann die Datenbank geändert wird.

Beachten Sie, dass nur Werte aktualisiert werden, bei denen das „generated“-Flag gesetzt ist. Das „generated“-Flag kann mit ` QSqlRecord::setGenerated()` gesetzt und mit ` QSqlRecord::isGenerated()` geprüft werden.

Siehe auch ` QSqlRecord::isGenerated()` und ` setData()`.

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