Redéfinition de la validation des mises à jour (FireDAC)
Remonter à Modification des données (FireDAC)
Sommaire
Bien que FireDAC soit capable de générer automatiquement des commandes SQL de mise à jour, dans certains cas cela ne fonctionne pas correctement :
Commande SQL d'origine | Problèmes possibles avec la commande SQL générée | Actions possibles |
---|---|---|
SELECT avec clauses JOIN | Inclut des colonnes à partir des tables jointes. |
|
SELECT avec opérations de regroupement | Met à jour plus d'un enregistrement. |
|
SELECT avec expressions de table commune | Echoue à obtenir le nom de la table de mise à jour. |
|
SELECT avec colonnes et expressions ayant un alias | Inclut des noms de colonnes incorrects. |
|
Appel de procédure stockée | Tous les problèmes SELECT ci-dessus. | |
Expressions et variables curseur | Tous les problèmes SELECT ci-dessus. | |
Autres commandes non SELECT. | Tous les problèmes SELECT ci-dessus. |
Remarque : Les problèmes mentionnés ci-dessus n'apparaissent pas systématiquement. Vous devez d'abord vérifier ce qui se produit réellement.
FireDAC peut détecter une table de base et des noms de colonnes pour des colonnes avec alias ou jointure :
SGBD | Configuration |
---|---|
Advantage Database | Non pris en charge. |
Firebird | Paramètre de définition de la connexion ExtendedMetadata = True requis. |
Informix | Non pris en charge. |
InterBase | Paramètre de définition de la connexion ExtendedMetadata = True requis. |
IBM DB2 | Automatique. |
MS Access | Automatique. |
MS SQL Server | Paramètre de définition de la connexion ExtendedMetadata = True requis. |
MySQL | Automatique. |
Oracle | Non pris en charge. |
PostgreSQL | Paramètre de définition de la connexion ExtendedMetadata = True requis. |
SQL Anywhere | Automatique. |
SQLite | Automatique. |
Base de données Teradata | Paramètre de définition de la connexion ExtendedMetadata = True requis. |
Spécification d'un nom de table de mise à jour
Dans certains cas, l'application doit spécifier un autre nom de table de base de données, dans laquelle les mises à jour sont validées. Pour ce faire, définissez UpdateOptions.UpdateTableName sur un nom de table requis.
Spécification des noms des colonnes de mise à jour et des modes
Dans certains cas, l'application doit exclure des colonnes d'une commande SQL de mise à jour. Pour ce faire, excluez pfInUpdate
de TField.ProviderFlags. Puis, définissez TField.ReadOnly pour empêcher toute modification de la valeur du champ.
Pour spécifier un autre nom de colonne de base de données, définissez TField.Origin sur une valeur requise.
Utilisation de TFDUpdateSQL
Le composant TFDUpdateSQL vous permet :
- de redéfinir de façon sélective les commandes SQL de mise à jour générées par FireDAC ;
- d'activer la validation des mises à jour, lorsque FireDAC ne peut pas générer des commandes de mises à jour, comme une commande SELECT complexe ou des appels de procédures stockées.
En général, TFDUpdateSQL est une collection de commandes de mises à jour SQL, lesquelles gèrent chacune des tâches spécifiques, comme l'insertion d'un nouvel enregistrement dans la base de données. TFDUpdateSQL peut être défini à la conception et / ou à l'exécution.
Définition à la conception
Pour définir le composant TFDUpdateSQL à la conception, déposez-le sur une fiche. Définissez la propriété UpdateObject de l'ensemble de données de manière à ce qu'elle pointe vers ce composant. Puis, double-cliquez sur TFDUpdateSQL pour invoquer l'éditeur SQL de mise à jour de FireDAC.
L'éditeur obtient automatiquement le nom de la table de mise à jour à partir de l'ensemble de données associé et définit les colonnes en fonction des colonnes de l'ensemble de données TField.ProviderFlags et TField.AutoGenerateValue.
Pour modifier la configuration, utilisez les options suivantes :
- la liste déroulante "Nom de la table" pour spécifier le nom de la table de mise à jour ;
- la zone de liste "Champs clé" pour spécifier des colonnes d'identification unique (correspondant à
pfInKey
dans ProviderFlags) ; - la zone de liste "Champs mis à jour" pour spécifier les colonnes à inclure dans la mise à jour (correspond à
pfInUpdate
dans ProviderFlags) ; - la zone de liste "Champs actualisés" pour spécifier les colonnes dont les valeurs doivent être actualisées après la validation des mises à jour (correspond à AutoGenerateValue <>
arNone
).
Le bouton "Décrire à partir de la BD" fournit la configuration de la table spécifiée, en extrayant ses métadonnées de la base de données. Le bouton "Rétablir valeurs par défaut" fournit la configuration en utilisant les propriétés des champs de l'ensemble de données. Les autres options peuvent être spécifiées sur la page "Options".
Une fois la configuration terminée, appuyez sur le bouton "Générer SQL" pour générer l'ensemble complet des commandes SQL de mise à jour. L'éditeur peut également être utilisé pour modifier manuellement les commandes SQL de mise à jour sur la page "Commandes SQL".
Appuyez sur OK pour enregistrer les modifications dans le composant TFDUpdateSQL.
Définition à l'exécution
Pour spécifier les commandes SQL de TFDUpdateSQL à l'exécution, l'application doit utiliser des propriétés XxxxSQL. Pour introduire dans une commande SQL des références à une valeur de colonne spécifique, utilisez les marqueurs de paramètre :
- nouvelle valeur de la colonne - :NEW_<nom de la colonne> ;
- ancienne valeur de la colonne - :OLD_<nom de la colonne> ;
- valeur actuelle de la colonne - :<nom de la colonne>.
Ces valeurs de paramètres sont assignées automatiquement par FireDAC. Ne leur assignez aucune valeur pour ne pas que leurs valeurs soient redéfinies. FireDAC ignore les paramètres ayant d'autres noms.
Les paramètres de commande et les macros de commande peuvent être définis uniquement à l'exécution. A cette fin, vous devez utiliser la propriété TFDUpdateSQL.Commands, qui retourne des références aux objets TFDCommand. Par exemple :
FDUpdateSQL1.InsertSQL.Text := 'insert into &tab (id, name) values (:new_id, :new_name)';
FDUpdateSQL1.Commands[arInsert].Macros[0].AsRaw := 'Orders';
Utilisation de OnUpdateRecord
Cet événement autorise la redéfinition complète de la validation des mises à jour à partir d'un ensemble de données. Le code du gestionnaire d'événement peut lire les propriétés des champs d'un ensemble de données :
- OldValue - renvoie la valeur d'origine du champ, telle qu'elle a été extraite ou telle qu'elle est après le dernier appel à CommitUpdates / CancelUpdates ;
- CurValue / Value - renvoie la valeur actuelle du champ.
Vous pouvez également combiner les approches TFDUpdateSQL et OnUpdateRecord pour activer la validation semi-automatique des mises à jour dans différentes tables ou bases de données.
Pour plus de détails, voir la description de l'événement OnUpdateRecord et les démos FireDAC :
- TFDQuery OnUpdateRecord
- FireDAC\Samples\Comp Layer\TFDUpdateSQL\Main
Voir aussi
Exemples
- Exemple FireDAC Schema Adapter
- Exemple FireDAC TFDQuery OnUpdateRecord