Bonjour,
Je travaille pour une congrégation religieuse et j'ai une base de données de gestion d'information sur les religieuses. Cette base de données a été créée sous Access 2003, migrée en Access 2010, puis en Access 2016 l'an dernier.
J'ai trois tables liées par le numéro de matricule de la nouvelle religieuse, avec une relation un-à-un avec intégrité référentielle :
- Personne, qui donne les informations courantes d'une religieuse : nom, prénom, date de naissance, etc.
- Histoire, qui donne les informations familiales;
- Religion, qui donne les informations sur sa vie religieuse.
Quand j'ajoute une religieuse, l'information doit donc s'ajouter dans les trois tables. J'ai un formulaire qui permet d'ajouter un enregistrement dans les trois tables à partir des informations d'une autre table (Novice). Tout fonctionnait parfaitement depuis des années. Mon problème c'est que depuis que j'utilise Access 2016, le code VBA du bouton d'ajout du formulaire ne fonctionne plus. Je reçois le message que je ne peux ajouter un enregistrement dans la table Personne, car un enregistrement est requis dans la table Histoire.
Je ne comprends pas pourquoi cela fonctionnait sous Access 2010, et que ça ne marche plus sous Access 2016. Je n'avais pas touché au code VBA, ni aux relations entre les tables. J'utilise des recordsets pour copier les informations dans chacune des tables et une fonction « Addprofesse » avec la méthode Addnew pour ajouter le numéro de matricule que je demande à l'utilisateur.
Voici un extrait du code :
Private Sub Ajoutprofesse
*Déclarations
***
Set bds = CurrentDb
Set rst = bds.OpenRecordset("SELECT * FROM PERSONNE" & _
" ORDER BY PERSONNE.NUM DESC;", dbOpenDynaset)
* Ici, il y a le message demandant le numéro de matricule à l'utilisateur.
rst.MoveFirst
Notemp = InputBox(Message, Titre)
If Notemp = "" Then
rst.Close
bds.Close
Exit Sub
Else
Nopers = Notemp
End If
Addprofesse rst, Nopers, Nompers
With rst
.Bookmark = .LastModified
.Edit
!PRENOM = Prenompers
!DATE_NAIS = Nz(Me!DATE_NAIS)
!DATE_TEMPO = Nz(Me!DATE_TEMPO)
!PROV_ACT = Me!PROV_ACT
!Remarque = Nz(Me!REM_CAND)
.Update
End With
rst.Close
Set rst = bds.OpenRecordset("SELECT * FROM HISTOIRE;", dbOpenDynaset)
Addprofesse rst, Nopers, Nompers
With rst
.Bookmark = .LastModified
.Edit
!ASS_SOC = Nz(Me!ASS_SOC)
!ASS_MAL = Nz(Me!ASS_MAL)
!VILLE_NAIS = Nz(Me!VILLE_NAIS)
* Autres champs
.Update
End With
rst.Close
Set rst = bds.OpenRecordset("SELECT * FROM RELIGION;", dbOpenDynaset)
Addprofesse rst, Nopers, Nompers
* Suite du code de la procédure Ajoutprofesse pour l'ajout des informations dans la table Religion.
***
bds.Close
Set Nomform = Me![Ajout professe SF]
DoCmd.Requery Nomform.Name
End Sub
J'ai essayé de créer des recordsets avec un nom spécifique à chaque table pour que je puisse les mettre avant le « rst.Close » du recordset lié à la table PERSONNE, afin d'ajouter tout de suite le nouveau matricule qui est maintenant ajouté dans la table Personne, mais j'ai eu le même message d'erreur.
Merci de me conseiller, car je ne comprends vraiment pas pourquoi cela ne fonctionne plus et je n'ai pas envie d'entrer toutes les données manuellement dans les trois tables.