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: |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSqlTableModel ist Teil der Datenbankklassen.
Ö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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QSqlTableModel::OnFieldChange | 0 | Alle Änderungen am Modell werden sofort auf die Datenbank übertragen. |
QSqlTableModel::OnRowChange | 1 | Änderungen an einer Zeile werden erst übernommen, wenn der Benutzer eine andere Zeile auswählt. |
QSqlTableModel::OnManualSubmit | 2 | Alle Ä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.