Modification d'une table liée
Bonjour
Environnement : Access 2002 SP3, Windows XP
J'ai lu et vérifié qu'on ne pouvait pas modifier la structure de tables liés.
Il faut pourtant que je trouve un moyen de les modifier sans sortir de mon application, d'où le raisonnement suivant - peut-être erroné :
- je supprime les liens en cours
- j'ouvre la base des tables que je veux attacher, dans un autre workspace
- je change la structure
- je re-crée les liens
ci-joint le code qui devrait faire ça :
Code:
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 34 35 36 37 38 39 40
|
Sub alter_ation(ByVal Fichier As String)
Dim dbs, db As Database
Dim tdf As TableDef
Set dbs = CurrentDb
' Elimination des liens
For Each tdf In dbs.TableDefs
If Len(tdf.Connect) > 0 Then
DoCmd.DeleteObject acTable, tdf.Name
End If
Next
Set wrk = CreateWorkspace("", "admin", "", dbUseJet)
Set db = wrk.OpenDatabase(Fichier)
For Each tdf In db.TableDefs
'Altération table Risques
If tdf.Name = "Risques_PALIER" Then
If Not ExisteChamp(tdf.Name, "Date_ident") Then
CurrentProject.Connection.Execute "ALTER TABLE " & tdf.Name & " ALTER COLUMN [Gravité_Risque] string(15)"
CurrentProject.Connection.Execute "ALTER TABLE " & tdf.Name & " ALTER COLUMN [Proba_Risque] string(12)"
CurrentProject.Connection.Execute "ALTER TABLE " & tdf.Name & " ADD COLUMN [Num_factor] string(3)"
CurrentProject.Connection.Execute "ALTER TABLE " & tdf.Name & " ADD COLUMN [Date_ident] date"
CurrentProject.Connection.Execute "ALTER TABLE " & tdf.Name & " ADD COLUMN [Date_maj] date"
CurrentProject.Connection.Execute "ALTER TABLE " & tdf.Name & " ADD COLUMN [Tendance] byte"
CurrentProject.Connection.Execute "ALTER TABLE " & tdf.Name & " ADD COLUMN [Phase] string(30)"
End If
End If
Next
' Re-Mise en place des liens
For Each TB In db.TableDefs
DoCmd.TransferDatabase acLink, "Microsoft Access", Fichier, acTable, TB.Name, TB.Name, False
Next
End Sub |
Mais cela ne fonctionne pas.
Access me dit : "Table ou contrainte non trouvée" sur le premier "Alter column".
Or il a pourtant trouvé la table puisqu'il est entré dans le "If".
A votre avis, qu'est ce qui cloche dans le raisonnement (ou dans le code) ?
merci à vous
cordialement