merci pour ta réponse, le problème est le suivant : j'essaie de dupliquer des enregistrements avec sql, mais je n'y arrive pas :
- j'ai une table T_Formation, qui contient les infos relatives à une formation (date, lieu, etc...), la clé est NumeroFormation
- une T_Formation_Participant : les participants aux formations, avec NumeroProfessionnel comme référence à la table des pros participants, et NumeroFormation comme lien avec T_Formation
mon but est d'arriver à "cloner" une formation, avec la liste des participants et des formateurs. Seule la date de la formation change. Pour cloner un enregistrement dans T_Formation, pas de problème :
DoCmd.RunSQL ("INSERT INTO T_Formation ( DateDebutFormation, LieuFormation, ThemeFormation, CommentaireFormation ) SELECT " & choixdate & ", T_Formation.LieuFormation, T_Formation.ThemeFormation, T_Formation.CommentaireFormation FROM T_Formation WHERE ((T_Formation.NumeroFormation) like " & Me.NumeroFormation & ");")
mais comment faire pour la liste des participants attachés à cette formation?
comme je suis un novice, j'ai fait n'importe quoi, et ça marche
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| Set db = CurrentDb
Set ZoneTravail = DBEngine(0)
Rem recherche du numero de formation créé
Set Rct_Aj = db.OpenRecordset("SELECT Max(T_Formation.NumeroFormation) AS MaxDeNumeroFormation FROM T_Formation;")
MaxNum = Rct_Aj(0)
Rct_Aj.Close
'''''''''''''''''''''''''
'PARTICIPANTS
'''''''''''''''''''''''''
Rem sélection du jeu d'enregistrements
Set Rct_Aj = db.OpenRecordset("SELECT * FROM T_Formation_Participant WHERE ((T_Formation_Participant.NumeroFormation) Like " & Me.NumeroFormation & ");")
Rem ajout des participants
If Rct_Aj.RecordCount <> 0 Then
Rct_Aj.MoveLast
Rct_Aj.MoveFirst
If Rct_Aj.RecordCount = 1 Then
DoCmd.RunSQL ("INSERT INTO T_Formation_Participant ([NumeroFormation], [NumeroProfessionnel]) VALUES (" & MaxNum & ", " & Rct_Aj(2) & ");")
Else
While Not Rct_Aj.AbsolutePosition = Rct_Aj.RecordCount - 1
DoCmd.RunSQL ("INSERT INTO T_Formation_Participant ([NumeroFormation], [NumeroProfessionnel]) VALUES (" & MaxNum & ", " & Rct_Aj(2) & ");")
Rct_Aj.MoveNext
Wend
Rct_Aj.MoveLast
DoCmd.RunSQL ("INSERT INTO T_Formation_Participant ([NumeroFormation], [NumeroProfessionnel]) VALUES (" & MaxNum & ", " & Rct_Aj(2) & ");")
End If
End If
Rem fermeture du jeu d'enregistrements
Rct_Aj.Close |
c'est codé à l'arrache, c'est probablement pas très logique, mais ça marche parfaitement. j'avais pas mal d'erreurs 3021 (Aucun enregistrement en cours), c'est pour cela que j'ai dû rajouter des "if" partout!
-puis j'ai essayé la même chose sur la table T_Formation_Formateur, mais ça bloque.
Je remercie d'avance toute âme charitable qui pourrait m'indiquer une solution plus sensée, peut-être sans passer par ADO alors qu'il n'y en a vraisemblablement pas besoin...
merci
Partager