Contexte : vue sous MS-SQL, dont chaque ligne est en pratique unique, l'identifiant étant ROWID.
Nota : pas de possibilité de modifier la vue pour y créer un index, ce qui aurait résolu le problème FYI
Objet : création de tables liées dans Access pour pouvoir les éditer (soit à partir de tables ms-sql, soit à partir de vues ms-sql).
Ici, on créer une table liée Access dbo_XXBNC_PARAMS à partir de la vue dbo.XXBNC_PARAMS dans MS-SQL (dont la colonne ROWID est en pratique un identifiant unique de chaque ligne).
Extrait du code :
Ce qui se passe : tout semble aller bien, sauf que la dernière ligne "CurrentDb.TableDefs.Append tdf" retourne une erreur 1039 (impossible de créer d'index, il y en a trop).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 For i = 0 To N - 1 Set tdf = New TableDef tdf.Name = arrTableName(i) tdf.SourceTableName = arrSourceName(i) tdf.Connect = strSourceConnect If tdf.Name = "dbo_XXBNC_PARAMS" Then With tdf Set Idx = New Index With Idx .Name = "IdxR" & i '.Primary = True '.Required = True '.Unique = True ' .Fields.Append .CreateField("ROWID") End With .Indexes.Append Idx '.Indexes.Refresh End With End If CurrentDb.TableDefs.Append tdf
A noter :
- la table access est détruite en préalable de l'exécution de ce code, qui doit recréer le lien
- ce code marche très bien pour les autres tables/vues où on ne cherche pas à créer d'index
- il est tout à fait possible de faire l'opération manuellement sur cette même table avec le wizard de création de table attachée. En fin de wizard, ce dernier nous demande alors de choisir la colonne ROWID et tout est parfait
- si on compare les propriétés de la table créée à la main, et de celle créée avant l'ordre append qui plante, tout est identique, sauf la propriété CollectionIndex qui vaut 0 dans la nouvelle (sans doute parceque pas encore rajoutée à tabledefs), et une constante (29 chez moi) lorsqu'on regarde la table manuellement créée.
- on peut créer autant de tables manuelles qu'on veut sur cette même vue (avec des noms différents bien sûr)
Bref, merci de votre aide.
Objectif = pouvoir automatiser la recréation (voir simple refresh en pouvnat changer de base de données) de cette table/vue, en vue de la rendre modifiable ds Access.
![]()
Partager