Bonjour,

Dans mon fichier ADP, connecté à SQL Server 2008 R2, j'ai une requête qui lie une table A à B par une jointure gauche. Ma jointure gauche fait qu'il peut ne pas avoir d’enregistrements coté B, et je souhaiterais pouvoir en rajouter. Pour des raisons pratiques (voir plus loin), je souhaiterais ne pas passer par une procédure stockée mais par un formulaire Access.

Concrètement, dans un environnement multi-utilisateur, je cherche à donner des droits (Table B) sur une liste d'objet (Table A). Ma table [A] liste donc tous les objets concernés, et ma table B contient un champ référant l'objet (origine de la jointure vers la table A), l'utilisateur (RefUser), et 3 champs booléen (consulter, modifier, supprimer). L'idée est de recenser tous les objet par un formulaire en mode feuille de données, et d'avoir les 3 cases de droits en face de chaque ligne.


-> J'ai donc créer un formulaire basé sur les utilisateurs, et un sous formulaire pour lister les droits de l'utilisateur choisi.
Les champs de mon sous-formulaire sont le nom de l'objet, et 3 case à cocher pour "Consulter", "Modifier", "Supprimer".

Ma requête initial était donc donc :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT [A].ID, [A].libelle, [B].RefObjet, [B].RefUser, [B].Consulter, [B].Modifier, [B].Supprimer FROM [A] LEFT JOIN [B] ON [A].ID = [B].RefObjet

mais pour pouvoir bénéficier de la liaison du sous formulaire avec le formulaire maître (fonctionnalité parent-fils d'Access) et donc l'utilisateur, j'ai fait un "cross join" avec une table des utilisateurs (Table [C]) :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT [A].ID, [A].libelle, [B].RefObjet, [C].ID, [B].RefUser, [B].Consulter, [B].Modifier, [B].Supprimer FROM [A] CROSS JOIN [C] LEFT JOIN [B] ON [A].ID = [B].RefObjet

L'affichage de mon formulaire donne exactement ce que je souhaite avoir.

Au début, tous les champs de la table B sont "Null". Ainsi, si je coche "Consulter" dans le sous-formulaire, je met à jour, par VBA (Événement BeforeUpdate), les bonnes valeurs pour les champs "[B].RefUser" et "[B].RefObjet", respectivement égale à "[C].ID et "[A].ID". Jusque là tout va bien ...

Mais après ça, j'ai une erreur qui me stipule que "Cet enregistrement a été modifié par un autre utilisateur depuis que vous avez commencé à le modifier ..." sauf que je suis sûr d'être le seul, et je ne sais pas d'où ça vient ...

Accessoirement, j'ai créé quelques enregistrement pour la table [B] en SQL et la mise à jour des données via mon formulaire fonctionne très bien ...

J'espère avoir été clair !

Quelque'un peut-il m'aider à identifier la source de mon problème ou qui puisse me dire que je n'ai pas le droit de faire ce que je fais ?

D'avance merci,

TALERE