lorsque je crée une table liée à partir d'une vue, à la main, access me demande à la fin de choisir un ou plusieurs champs comme clé unique … (par exemple l'id, ou pr files lines le file_id et le line_id).Du coup je peux modifier les données de la vue.
Mais quand je crée les table liée automatiquement avec un macro , ça ne me crée par l'index.J'ai essayé de modifer le programme pour le faire, mais Access refuse et me crée un erreur si je fais cet index
Je vous remercie de tous votre réponse
pour créer::
...........
Set tdf = New TableDef
tdf.Name = arrTableName(i)
tdf.SourceTableName = arrSourceName(i)
tdf.Connect = strSourceConnect
CurrentDb.TableDefs.Append tdf
..........
Le gros souci, la création d'index.
On peut voir avec une simple requête :
CREATE TABLE tblFrancisHop1
(IDClient AutoIncrement CONSTRAINT CléPrimaire PRIMARY KEY,
Prénom TEXT (30),
Nom TEXT (30),
NomEntreprise TEXT (60) CONSTRAINT NomEntreprise UNIQUE,
Adresse TEXT (80),
Ville TEXT (40),
État TEXT (2),
CodePostal TEXT (5),
CONSTRAINT NomClient UNIQUE (Nom, Prénom) );
Ou alors on place derrière un bouton :
TableCreateDAO
Sans oublier dans un module :
Public Function TableCreateDAO()
Dim Db As DAO.Database
Dim Tbl As DAO.TableDef
Dim fld As DAO.Field
Dim idx As DAO.Index
Dim Prp As DAO.Property
Set Db = CurrentDb() ' Ouverture base de données
Set Tbl = Db.CreateTableDef("NouvelleTableFH") 'Création d'une table
'********************************************************************************
Set idx = Tbl.CreateIndex("PrimaryKey") 'création d'un index
idx.Primary = True 'clé primaire
idx.Required = True
idx.Unique = True ' sans doublons
Set fld = idx.CreateField("CodeClient") 'définition du champ qui sert d'index
idx.Fields.Append fld 'ajout du champ dans l'index
Tbl.Indexes.Append idx 'ajout de l'index dans la table
'**********************************************************************************
Set fld = Tbl.CreateField("CodeClient", dbLong) 'création du Champ n°1
fld.OrdinalPosition = 1 'champ position 1
fld.Attributes = dbAutoIncrField 'définition numéroauto
Tbl.Fields.Append fld 'ajout du champ dans la table
Set fld = Tbl.CreateField("NomClient", dbText) 'Champ n°2
fld.OrdinalPosition = 2 'champ position 2
fld.Size = 100 'taille 100 caractères
fld.Required = True 'valeur nulle interdite
fld.AllowZeroLength = False 'chaine vide autorisée
Tbl.Fields.Append fld 'ajout du champ dans la table
Set fld = Tbl.CreateField("ChampTexte", dbText) 'Champ n°3
fld.OrdinalPosition = 3
fld.Size = 100
fld.Required = True
fld.AllowZeroLength = False
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("EntierLong", dbLong) 'Champ n°4
fld.OrdinalPosition = 4
fld.Attributes = dbFixedField
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("Booleen", dbBoolean) 'Champ n°5
fld.OrdinalPosition = 5
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("Byte", dbByte) 'Champ n°6
fld.OrdinalPosition = 6
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("Entier", dbInteger) 'Champ n°7
fld.OrdinalPosition = 7
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("Monétaire", dbCurrency) 'Champ n°8
fld.OrdinalPosition = 8
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("ReelSimple", dbSingle) 'Champ n°9
fld.OrdinalPosition = 9
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("ReelDouble", dbDouble) 'Champ n°10
fld.OrdinalPosition = 10
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("ChampDate", dbDate) 'Champ n°11
fld.OrdinalPosition = 11
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("Binary", dbBinary) 'Champ n°12
fld.OrdinalPosition = 12
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("ChampMemo", dbMemo) 'Champ n°13
fld.OrdinalPosition = 13
Tbl.Fields.Append fld
Set fld = Tbl.CreateField("ChampOLE", dbBigInt) 'Champ n°14
fld.OrdinalPosition = 14
Tbl.Fields.Append fld
Db.TableDefs.Append Tbl 'ajoute la table à la base
RefreshDatabaseWindow 'rafraichissement de la fenêtre base de données
'**************************************************************************************************
Set tdf = Db.TableDefs("NouvelleTableFH") ' entrée des propriétés caption et description
Set fld = Tbl.Fields("CodeClient") 'Champ concerné
Set Prp = fld.CreateProperty("Caption", dbText)
Prp.Value = "Code Client" 'Légende
fld.Properties.Append Prp
Set Prp = fld.CreateProperty("Description", dbText)
Prp.Value = "Champ clef client" 'Description
fld.Properties.Append Prp
Set fld = Tbl.Fields("NomClient") 'Champ concerné
Set Prp = fld.CreateProperty("Caption", dbText)
Prp.Value = "Nom Client" 'Légende
fld.Properties.Append Prp
Set Prp = fld.CreateProperty("Description", dbText)
Prp.Value = "Nom du client" 'Description
fld.Properties.Append Prp
'Etc.
End Function
Cordialement.
__________________________
Le peu que je sais, c'est à mon ignorance que je le dois. Sacha Guitry