Champs d'identification unique (FireDAC)
Remonter à Modification des données (FireDAC)
Sommaire
Informations générales
Les colonnes d'identification unique sont un jeu de colonnes qui identifient de manière unique chaque enregistrement d'un ensemble de données. Lorsqu'un ensemble de données est une table SELECT unique, les colonnes d'identification unique sont la clé primaire d'une table FROM. Le plus souvent, le champ auto-incrémenté est la clé primaire de la table.
Usage
Les champs d'identification unique sont utilisés pour construire des clauses WHERE pour :
- valider les mises à jour (Edit/Post) et les supprimer (Delete) d'un ensemble de données, lorsque UpdateOptions.UpdateMode est sur
upWhereKeyOnly
ouupWhereChanged
; - actualiser l'enregistrement en cours d'un ensemble de données (RefreshRecord) ;
- sélectionner des valeurs BLOB différées (FetchBlobs) et des ensembles de données imbriqués (FetchDetails).
Approvisionnement
TFDQuery, TFDTable, TFDMemTable et TFDCommand extraient automatiquement les colonnes d'identification unique (mkPrimaryKeyFields) de la table principale (la première) dans les instructions SELECT ... instructions FROM ..., lorsque fiMeta est inclus dans FetchOptions.Items. Remarque :
- l'interrogation mkPrimaryKeyFields peut prendre du temps ;
- l'application peut avoir besoin de spécifier explicitement des colonnes d'identification unique, lorsque FireDAC échoue à les déterminer correctement.
Pour spécifier explicitement des colonnes, excluez fiMeta de FetchOptions.Items, et utilisez l'une des options suivantes :
- définissez UpdateOptions.KeyFields sur une liste de noms de colonnes séparés par des ';' ;
- incluez pfInKey dans la propriété TField.ProviderFlags correspondante.
Lorsque l'application crée des champs persistants, TField.ProviderFlags est initialement défini correctement. Par la suite, la configuration automatique du champ n'est pas effectuée lorsque la structure de la base de données ou la requête est modifiée. Vous devez mettre à jour ProviderFlags manuellement pour ajuster la liste de colonnes. Par ailleurs, si la clé primaire est constituée de plusieurs champs, tous doivent être inclus dans des champs persistants.
Colonnes d'identification de ligne
Sinon, il est possible d'inclure une colonne d'identification de ligne dans la liste SELECT. Lorsque FireDAC trouve de telles colonnes, il n'extrait pas les métadonnées de mkPrimaryKeyFields ; il utilise cette colonne. Les SGBD supportés sont les suivants :
SGBD | Colonne d'identification de ligne |
---|---|
Firebird | DB_KEY |
Informix | ROWID |
Interbase | DB_KEY / RDB$DB_KEY |
Oracle | ROWID |
PostgreSQL | OID. La table doit être créée avec des OID (identificateurs d'objet). |
SQLite | ROWID |
Par exemple, sur Oracle :
SELECT T.*, ROWID FROM Orders T