Eindeutige Kennzeichnungsfelder (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Bearbeiten von Daten (FireDAC)

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:

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:

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

Siehe auch