Creation index

Résolu
todac Messages postés 15 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 28 janvier 2012 - 20 avril 2006 à 13:16
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 - 20 avril 2006 à 21:03
Bonjour,
en vue d'eviter des doublons dans une base je voudrai indexer 3 champs dasn Un seul si possible
j ai une piste mais ca ne fonctionne pas
aurriez vous une idée ?
d'avance Merci de votre aide.

Public Function Creation_base(CheminBase As String)
Dim Mabase As Database 'Ajouter "preferences Microsoft DAO Object X Library"
Dim Table As TableDef
Dim Champ As Field 'Déclaration des variables
Dim Idx As Index
On Error GoTo ExisteDeja

'Création de la base de données "Essai.mdb" dans le répertoire de l'application
Set Mabase = DBEngine.CreateDatabase(CheminBase, dbLangGeneral)

Set Table = Mabase.CreateTableDef("Mesure1")
'creation des champs
Table.Fields.Append Table.CreateField("immat", dbText)

Table.Fields.Append Table.CreateField("datesat", dbText)
Table.Fields.Append Table.CreateField("heuresat", dbText)


Set Idx = Table.CreateIndex("Datepc")
Set Idx = Table.CreateIndex("heurepc")
Set Idx = Table.CreateIndex("immat")

Idx.Fields.Append Idx.CreateField("datepc")
Idx.Fields.Append Idx.CreateField("heurepc")
Idx.Fields.Append Idx.CreateField("immat")

Mabase.TableDefs.Append Table

Exit Function
ExisteDeja:
On Error GoTo 0
Beep
Debug.Print "probleme base"
End Function

7 réponses

cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
20 avril 2006 à 14:34
Sub Creation_base(CheminBase As String)
Dim MaBase As DAO.Database
Set MaBase=DBEngine(0).CreateDatabase(CheminBase,dbLangGeneral)
MaBase.Execute "CREATE TABLE Mesure1(Immat TEXT(8), DatePc TEXT(10), HeurePc TEXT(8), CONSTRAINT Primarykey PRIMARY KEY(Immat, DatePc, HeurePc));"
MaBase.Close
End Sub

Voilà, en une seule instruction la table est créée avec son index primaire...
3
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
20 avril 2006 à 21:03
Quel est l'intérêt de mettre un champ autoincrementé dans la mesure ou l'index primaire se fait sur les champs Immat, Datesat et Heuresat.
"SELECT * FROM Mesure1;" se classe automatiquement dans l'ordre de l'index primaire. J'ai créé beaucoup d'applications utilisant des bases de données Access, dont certaines étaient très complexes, jamais je n'ai utilisé de champs autoincrement, car en cas de suppression d'enregistrements, on se prépare de beaux petits soucis si plusieurs tables sont liées.
3
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
20 avril 2006 à 14:03
Pourquoi ne pas utiliser les intructions SQL pour créer l'index:
1 - CREATEINDEX :

"CREATE UNIQUE INDEX Primarykey ON Mesure1 (datepc, heurepc,immat)WITH PRIMARY;"

2 - ALTER TABLE :
"ALTER TABLE Mesure1 ADD CONSTRAINT Primarykey PRIMARY KEY (datepc,heurepc,immat);"

Ensuite, il suffit d'exécuter ce code avec l'instruction Execute... d'un objet Command ou Database
0
todac Messages postés 15 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 28 janvier 2012
20 avril 2006 à 14:17
Merci pour cette reponse rapide,
mais je suis debutant pourrriez vous m inserer les lignes dans l exemple ci dessus ?
j ai des problemes avec les ouvertures et fermetures (Mabase.TableDefs.Append Table) je n arrive pas a comprendre
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
todac Messages postés 15 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 28 janvier 2012
20 avril 2006 à 14:42
Merci Beaucoup pour cette simplification
ptite question subsidiaire su je veux ajouter un champ non indexé à cette base ?
un champ vitesse double(10) par exemple
Merci
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
20 avril 2006 à 14:52
Il suffit de l'ajouter dans la liste des champs après le nom de la table (nomChamp TypeDeDonnée). Il faut savoir qu'en SQL, les types de données sont un peu différents qu'avec les objets DAO.
Chaîne de 10 caractères =TEXT(10),
Booléen = BIT,
Octet=BYTE,
Entier=SHORT,
Entier long=LONG,
Réel simple=SINGLE,
Réel double=DOUBLE,
Monétaire=CURRENCY,
Date=DATETIME,
Mémo=LONGTEXT,
Binaire=LONGBINARY,...
Celà vient du fait que le SQL est un language avec sa propre syntaxe....
0
todac Messages postés 15 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 28 janvier 2012
20 avril 2006 à 20:34
Encore Merci tout fonctionne parfaitement
il me reste un ptit probleme
Voici ma commande mais AUTOINCREMENT me fait planter execute
le but est d avoir un N° d orde car apres je fais un sql = "Select * From Mesure1 Where 1 ORDER BY Numentree"

Merci

Dim Mabase As DAO.Database
Set Mabase = DBEngine(0).CreateDatabase(CheminBase, dbLangGeneral)
Mabase.Execute "CREATE TABLE Mesure1(Numentree SINGLE AUTOINCREMENT, Machine TEXT(16), Type TEXT(16), Immat TEXT(10), Altitude SINGLE, Latitude TEXT(10), Longitude TEXT(10), Satellite SHORT, Datesat TEXT(8), Heuresat TEXT(8), Azimuth SINGLE, CONSTRAINT Primarykey PRIMARY KEY(Immat, Datesat, Heuresat));"
Mabase.Close
0
Rejoignez-nous