Mettre à jour, insérer et caractère ? dans DBEXECUTE

Cette rubrique décrit le comportement de mise à jour et d'insertion de DBEXECUTE, ainsi que l'utilisation du caractère ? .

Avec une table SQL vide appelée Articles, et deux colonnes : ID et nom. ID est la clé primaire.

La formule suivante est contenue dans une cellule non protégée :

=DBEXECUTE("configdb", "SELECT items.id,items.name FROM items WHERE ID=1","INSERT into items (ID,Name) VALUES (1,?)")

En mode Affichage, spécifier 1 dans la cellule et appuyer sur Entrée.

Étant donné que la table est vide et ne contient pas d'ID avec la valeur 1, l'instruction Insertion est exécutée. L'instruction Insertion crée cette ligne dans la table :

Numéro de ligne ID Nom
1 1 1

Lorsqu'on entre 1, l'ID est spécifié. Le caractère ? entraîne la saisie de cette valeur dans la colonne Nom.

Il faut alors spécifier 2 dans la cellule. Puisque l'ID 1 est présent, l'instruction Insertion n'est pas exécutée. En revanche, la ligne contenant l'ID 1 est mise à jour comme le montre ce tableau :

Numéro de ligne ID Nom
1 2 1

L'instruction Insertion n'est pas exécutée, la colonne Nom n'est pas mise à jour.

Il faut alors spécifier 3 dans la cellule. Comme l'ID 1 n'est pas présent, l'instruction Insertion est exécutée et une nouvelle ligne est ajoutée :

Numéro de ligne ID Nom
1 1 3
2 2 1

Les valeurs 1 et 3 résultent de cette partie de la formule : VALUES (1,?).

En spécifiant maintenant 4, l'ID 1 est à nouveau présent et la ligne contenant l'ID 1 est mise à jour.

Numéro de ligne ID Nom
1 2 1
2 4 3

Si on indique 5, une ligne supplémentaire est ajoutée :

Numéro de ligne ID Nom
1 1 5
2 2 1
3 4 3