Redéfinition de la validation des mises à jour (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Modification des données (FireDAC)

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.
  • Eventuellement, exclure les colonnes qui ne proviennent pas de la table de base des commandes de mise à jour, en excluant pfInUpdate de TField.ProviderFlags et en définissant TField.ReadOnly sur True.
  • Eventuellement, spécifier le nom de la colonne de base, en spécifiant TField.Origin.
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.

FDUpdateSQLEditor.png

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 :

Voir aussi

Exemples