Eindeutige Kennzeichnungsfelder (FireDAC)
Nach oben zu Bearbeiten von Daten (FireDAC)
Inhaltsverzeichnis
Allgemeine Informationen
Der Spaltensatz, durch den jeder Datensatz einer Datenmenge eindeutig gekennzeichnet ist, besteht aus den eindeutigen Kennzeichnungsspalten. Wenn eine Datenmenge ein einzelnes Tabellen-SELECT ist, dann sind die eindeutigen Kennzeichnungsspalten ein Primärschlüssel einer FROM-Tabelle. Häufig fungiert ein Zählerfeld (Auto-Inkrementierung) als Primärschlüssel der Tabelle.
Verwendung
Eindeutige Kennzeichnungsfelder werden zum Erstellen von WHERE-Klauseln verwendet, um:
- Aktualisierungen (Edit/Post) einzutragen und aus einer Datenmenge zu löschen (Delete), wenn UpdateOptions.UpdateMode
upWhereKeyOnly
oderupWhereChanged
ist. - Den aktuellen Datensatz zu aktualisieren (RefreshRecord).
- Verzögerte BLOB-Werte (FetchBlobs) und verschachtelte Datenmengen (FetchDetails) auszuwählen.
Bereitstellung
TFDQuery, TFDTable, TFDMemTable und TFDCommand rufen die eindeutigen Kennzeichnungsspalten (mkPrimaryKeyFields) für die Haupttabelle (erste) in den "SELECT ... FROM ..."-Anweisungen ab, wenn fiMeta in FetchOptions.Items enthalten ist. Hinweis:
- Das Abfragen von mkPrimaryKeyFields kann zeitaufwendig sein.
- Die Anwendung muss ggf. eindeutige Kennzeichnungsspalten explizit angeben, wenn FireDAC sie nicht korrekt bestimmen kann.
Schließen Sie fiMeta aus FetchOptions.Items aus, und verwenden Sie eine der folgenden Optionen, um Spalten explizit anzugeben:
- Setzen Sie UpdateOptions.KeyFields auf eine durch Semikolon (;) getrennte Liste mit Spaltennamen.
- Schließen Sie pfInKey in die entsprechende TField.ProviderFlags-Eigenschaft ein.
Wenn die Anwendung persistente Felder erstellt, dann wird TField.ProviderFlags anfänglich korrekt festgelegt. Danach wird keine automatische Felderkonfiguration durchgeführt, wenn die DB-Struktur oder Abfrage geändert wird. Sie müssen ProviderFlags manuell aktualisieren, um die Spaltenliste anzupassen. Wenn der Primärschlüssel aus mehreren Feldern besteht, dann müssen alle in die persistenten Felder einbezogen werden.
Kennzeichnungsspalten für Zeilen
Alternativ kann eine Kennzeichnungsspalte für Zeilen in die SELECT-Liste aufgenommen werden. Wenn FireDAC eine derartige Spalte findet, werden die mkPrimaryKeyFields-Metadaten nicht abgerufen, sondern diese Spalte verwendet. Folgende DBMSs werden unterstützt:
DBMS | Kennzeichnungsspalte für Zeile |
---|---|
Firebird | DB_KEY |
Informix | ROWID |
InterBase | DB_KEY/RDB$DB_KEY |
Oracle | ROWID |
PostgreSQL | OID. Die Tabelle muss mit OIDs erstellt werden. |
SQLite | ROWID |
Beispiel für Oracle:
SELECT T.*, ROWID FROM Orders T