Elaboration des instructions SQL de mise à jour

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation du BDE pour placer en mémoire cache les mises à jour - Index


Remarque : Le moteur de base de données Borland (BDE, Borland Database Engine) a été déprécié. Il ne sera donc pas amélioré. Par exemple, le BDE ne prendra jamais en charge Unicode. Vous ne devriez pas entreprendre de nouveaux développements avec BDE. Prévoyez plutôt de migrer vos applications de bases de données existantes de BDE vers dbExpress.

Au moment de la conception, vous pouvez utiliser l'éditeur SQL de mise à jour pour écrire les instructions SQL pour les propriétés DeleteSQL, InsertSQL et ModifySQL. Si vous n'utilisez pas cet éditeur, ou si vous voulez modifier les instructions générées, respectez les points suivants en écrivant les instructions de suppression, d'insertion et de modification des enregistrements de la table de base.

La propriété DeleteSQL ne doit contenir qu'une instruction SQL avec la commande DELETE La table de base à mettre à jour doit être nommée dans la clause FROM. Pour que l'instruction SQL ne supprime que l'enregistrement de la table de base correspondant à celui supprimé dans la mémoire cache de mise à jour, utilisez une clause WHERE. Dans la clause WHERE, utilisez un paramètre pour un ou plusieurs champs afin d'identifier de manière unique l'enregistrement dans la table de base correspondant à celui figurant dans la mémoire cache de mise à jour. Si les paramètres sont nommés comme les champs et précédés du préfixe "OLD_", ils reçoivent automatiquement les valeurs des champs correspondants de l'enregistrement figurant dans la mémoire cache de mise à jour. Si les paramètres sont nommés d'une autre façon, vous devez fournir les valeurs de paramètres.

DELETE FROM Inventory I
WHERE (I.ItemNo = :OLD_ItemNo)

Certains types de tables peuvent être incapables de trouver l'enregistrement dans la table de base quand les champs utilisés pour identifier l'enregistrement contiennent des valeurs NULL. Dans ces cas, la mise à jour par suppression échoue pour ces enregistrements. Pour prendre cela en compte, ajoutez une condition pour les champs pouvant contenir une valeur NULL, à l'aide du prédicat IS NULL (en plus d'une condition pour une valeur non NULL). Par exemple, si le champ FirstName peut contenir une valeur NULL :

DELETE FROM Names
WHERE (LastName = :OLD_LastName) AND
  ((FirstName = :OLD_FirstName) OR (FirstName IS NULL))

L'instruction InsertSQL ne doit contenir qu'une instruction SQL avec la commande INSERT. La table de base à mettre à jour doit être nommée dans la clause INTO. Dans la clause VALUES, fournissez une liste de paramètres séparés par des virgules. Si les paramètres sont nommés comme les champs, ils reçoivent automatiquement les valeurs des champs correspondants de l'enregistrement figurant dans la mémoire cache de mise à jour. Si les paramètres sont nommés d'une autre façon, vous devez fournir les valeurs de paramètres. La liste de paramètres fournit les valeurs des champs du nouvel enregistrement inséré. Il doit y avoir autant de paramètres de valeur que de champs listés dans l'instruction.

INSERT INTO Inventory
(ItemNo, Amount)
VALUES (:ItemNo, 0)

L'instruction ModifySQL ne doit contenir qu'une instruction SQL avec la commande UPDATE. La table de base à mettre à jour doit être nommée dans la clause FROM. Incluez une ou plusieurs affectations de valeur dans la clause SET. Si les valeurs des affectations de la clause SET sont des paramètres nommés comme les champs, les paramètres reçoivent automatiquement les valeurs des champs correspondants de l'enregistrement mis à jour figurant dans la mémoire cache. Vous pouvez affecter d'autres valeurs de champ en utilisant d'autres paramètres, tant que les paramètres ne portent pas le nom de champs existants et que vous fournissiez les valeurs. Comme avec l'instruction DeleteSQL, fournissez une clause WHERE pour identifier de manière unique l'enregistrement de la table de base à mettre à jour, en utilisant des paramètres nommés comme les champs et précédés du préfixe "OLD_". Dans l'instruction de mise à jour ci-dessous, le paramètre :ItemNo reçoit automatiquement une valeur, contrairement à :Price.

UPDATE Inventory I
SET I.ItemNo = :ItemNo, Amount = :Price
WHERE (I.ItemNo = :OLD_ItemNo)

Considérant le code SQL de mise à jour ci-dessus, prenons un exemple où l'utilisateur final de l'application modifie un enregistrement existant. La valeur d'origine du champ ItemNo est 999. Dans une grille connectée à l'ensemble de données en mémoire cache, l'utilisateur final modifie la valeur du champ ItemNo en 123, et celle du champ Amount en 20. Quand la méthode ApplyUpdates est invoquée, cette instruction SQL affecte tous les enregistrements de la table de base dont le champ ItemNo a pour valeur 999, en utilisant l'ancienne valeur contenue dans le paramètre :OLD_ItemNo. Dans ces enregistrements, l'instruction modifie la valeur du champ ItemNo field en 123 (en utilisant le paramètre :ItemNo, la valeur provenant de la grille) et celle du champ Amount en 20.

Voir aussi