Non ci sono scorciatoie.
La routine da scrivere tuttavia credo possa essere solo 1... se la scrivi in modo intelligente...!
Devi partire dal punto che hai sempre 2 Tabelle una lato 1 ed una lato Molti.
La prima cosa da fare è AGGIUNGERE i campi NUOVI sia come PK(lato1) che come FK(latoM) e saranno come PK Counter e si aggiornerà da solo, mentre nella Tabella lato M, dovrai farlo via codice... ma facendo riferimento alla HOLD_PK...
Il lavoro pertanto è da fare SOLO sulle Tabelle lato molti in realtà... visto che il COUNTER si valorizza nel momento in cui lo inserisci...!
Quindi fai un CICLO sulla Tab(Lato1) leggendo la OLD_PK e la NEW_PK.
Ora nel ciclo fai una Query UPDATE sulla Tab(latoM) in questo modo:
"UPDATE T_M SET New_FK=" & NEW_PK & " WHERE old_FK=" & OLD_PK
Se pertanto scrivi una Funzione che accetta come Parametri:
1) Tabella Lato 1
2) Nome Old_PK
3) Nome New_PK
4) Tabella Lato M
5) Nome Old_FK
6) Nome New_FK
Potrai parametrizzare tutto...
Function SetNewFK(Tbl_Uno As string, Old_Pk as String, New_Pk As String, _
Tbl_Molti As string, Old_Fk as String, New_Fk As String)
Dim rs As DAO.Recordset
Dim strSQLU As String
Set rs=DbEngine(0)(0).OpenRecordset("SELECT " & Old_Pk & "," & New_Pk & " FROM " & Tbl_Uno & " ORDER BY " & Old_Pk)
Do until rs.eof
strSQLU="UPDATE " & Tbl_Molti & "SET " & New_FK & "=" & Rs.Fields(New_Pk).Value & " WHERE " & old_FK & "=" & rs.Fields(Old_Pk).Value
DbEngine(0)(0).Execute strSQLU
DoEvents
rs.Movenext
Loop
rs.close
set rs=nothing
A questo punto prima di cancellare le VECCHIE PK-FK, scolleghi le tabelle o meglio aggiorni le relazioni sulle NUOVE CHIAVI e vedi se tutto torna... posi solo alla FINE cancelli le vecchie CHIAVI.
Fai uno o 2 BackUp... è meglio...
P.S. il codice l'ho buttato giù a braccio, quindi manca gestione errori e magari ha qualche BUGS... ma era solo per darti uno spunto operativo.