RecordsAffected ne fonctionne pas ?

Suite à une conversation sur les forums…
J’exécute des instructions SQL à l’aide de la commande Execute. J’ai vu qu’on pouvait récupérer le nombre de lignes modifiées par CurrentDb.RecordsAffected. Mais on dirait que ça ne marche pas ?

Ce qui ne marche pas

En toute logique, ce code devrait afficher 1, mais il affiche toujours 0, alors qu’une ligne est bien ajoutée à la table…

Première explication

Il se peut qu’aucune ligne n’ait été insérée, tout simplement parce que vous auriez des doublons sur la clef primaire de la table. Dans notre exemple, si un Code Produit (clef primaire) existe déjà avec la valeur 11, l’instruction SQL échoue, et c’est normal qu’on affiche 0.

Deuxième explication

Mais même quand une ligne est ajoutée à la table, RecordsAffected affiche toujours 0 !

Le problème ne vient pas de RecordsAffected, mais d’une mauvais utilisation de CurrentDb : à chaque fois que vous faites appel à cette instruction, vous instanciez un nouvel objet Base de données (DAO.Database). Du coup, le CurrentDb utilisé dans le MsgBox n’est pas le même que celui utilisé pour exécuter le code SQL, c’est en quelque sorte un « nouveau » CurrentDb, dont la propriété RecordsAffected vaut 0, sa valeur initiale.

La solution

La solution consiste à passer par une variable pour pointer vers un seul et unique objet Database le temps de l’opération, au lieu d’appeler CurrentDb à chaque fois. Ce qui donne :

Voir aussi cet autre article sur CurrentDb. où il est question de performances.

Note
Si vous aviez utilisé l’ancienne syntaxe Access en remplaçant CurrentDb par DBEngine.Workspaces(0).Databases(0) ou DBEngine(0)(0), le RecordsAffected aurait fonctionné, parce que cette syntaxe pointe vers la même instance de Database. Mais cette syntaxe est d’une part plus longue à écrire, d’autre part déconseillée depuis Access 2000, pour éviter des problèmes en réseau.
Important
L’exemple de code ci-dessus fait appel à la bibliothèque DAO (Microsoft DAO Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.

Pour plus de détails sur les références, consultez cette page.

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *