OVH Cloud OVH Cloud

Création d'un index par VBA

2 réponses
Avatar
blancmunier
Bonjour,
J'ai besoin via VBA de cr=E9er une proc=E9dure qui indexe le champs d'une
table (en tant que cl=E9 primaire) en supposant qu'il n'y a pas d'index
sur la table.
J'ai donc essayer en utilisant SQL cette syntaxe l=E0 :

Public Sub AjouteIndex(NomTable As String, NomChampsIndex As String)
DoCmd.RunSQL ("ALTER TABLE " & NomTable & " ADD CONSTRAINT PK_tbl
PRIMARY KEY CLUSTERED (" & NomChampsIndex & ")")
End Sub

Mais j'ai le message suivant : "Erreur de Syntaxe dans la clause
CONSTRAINT"

DU coup j'ai essay=E9 de manipuler la table avec DAO :
Public Sub AjouteIndex(NomTable As String, NomChampsIndex As String)
Dim t As DAO.TableDef
Dim idx As DAO.Index
Dim bd As DAO.Database
Set bd =3D CurrentDb
Set t =3D bd.TableDefs(NomTable)
With t
Set idx =3D .CreateIndex("NomChampsIndex")
With idx
.Fields.Append .CreateField(NomChampsIndex)
End With
.Indexes.Append idx
End With
Set idx =3D Nothing
Set t =3D Nothing
Set bd =3D Nothing
End Sub

Et la, je n'ai pas de msg d'erreur, ms je n'ai pas mon index non plus
sur la table !
La je patauge, et je me dis que je suis peut etre en train de
r=E9inventer la roue...
Dc si qqun par hasard aurait une proc=E9dure qui permettrait de rajouter
une cl=E9 primaire a une table qui n'a pas d'index ou si qqun
d=E9celerait les fautes dans mes bouts de codes, je le remercie par
avance
A+
Yvan

2 réponses

Avatar
Kifran
Bonjour ,
En effet il y a plusieurs possibilites :

1/ Utiliser la commande db.Execute :
http://support.microsoft.com/default.aspx?scid=kb;en-us;115833

2/ Utiliser le DoCmd.RunSQL
sqlstr = "CREATE UNIQUE INDEX " & _
" MyIndex ON <nom table>(nom_colonne) With Primary"
DoCmd.RunSQL
sqlstrMhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnacc2k/html/acfundsql.asp

3/ Utiliser DAO TableDef et CreateIndex :

http://support.microsoft.com/default.aspx?scid=kb;en-us;210174

Au choix !

Salutations
Francis


wrote in message
news:
Bonjour,
J'ai besoin via VBA de créer une procédure qui indexe le champs d'une
table (en tant que clé primaire) en supposant qu'il n'y a pas d'index
sur la table.
J'ai donc essayer en utilisant SQL cette syntaxe là :

Public Sub AjouteIndex(NomTable As String, NomChampsIndex As String)
DoCmd.RunSQL ("ALTER TABLE " & NomTable & " ADD CONSTRAINT PK_tbl
PRIMARY KEY CLUSTERED (" & NomChampsIndex & ")")
End Sub

Mais j'ai le message suivant : "Erreur de Syntaxe dans la clause
CONSTRAINT"

DU coup j'ai essayé de manipuler la table avec DAO :
Public Sub AjouteIndex(NomTable As String, NomChampsIndex As String)
Dim t As DAO.TableDef
Dim idx As DAO.Index
Dim bd As DAO.Database
Set bd = CurrentDb
Set t = bd.TableDefs(NomTable)
With t
Set idx = .CreateIndex("NomChampsIndex")
With idx
.Fields.Append .CreateField(NomChampsIndex)
End With
.Indexes.Append idx
End With
Set idx = Nothing
Set t = Nothing
Set bd = Nothing
End Sub

Et la, je n'ai pas de msg d'erreur, ms je n'ai pas mon index non plus
sur la table !
La je patauge, et je me dis que je suis peut etre en train de
réinventer la roue...
Dc si qqun par hasard aurait une procédure qui permettrait de rajouter
une clé primaire a une table qui n'a pas d'index ou si qqun
décelerait les fautes dans mes bouts de codes, je le remercie par
avance
A+
Yvan
Avatar
blancmunier
Excellent ! je te remercie
a+
Yvan