Simple : Ceci est une petite procédure permettant de créer une base avec ADOX.
Du coup, bien sûr, il faut ajouter dans les références de son projet "Microsoft ADO Ext. 2.X for DDL and Security" (msadox.dll) !
La base contient 2 tables.
Les tables contiennent :
- Une clé primaire unique auto-incrémentée (super-relou à trouver)
- Des champs non requis, ie dont le remplissage n'est pas obligatoire (encore plus relou !!!)
- Valeur par défaut (Ca, quand on a trouvé les 2 1ers, ça va)
- La création d'un champ OLE (image dans la DB)
- clés étrangères et indexes pour la recherche.
J'ai lutté plusieurs heures pour faire un truc qui fonctionne... Ca devrait faire gagner du temps à pas mal de monde.
Source / Exemple :
Sub createDB()
Dim cat As ADOX.Catalog
Dim tbl As New ADOX.Table
Dim i As Single
Set cat = New ADOX.Catalog
cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.path & "\new.mdb"
' J'ai passé la partie qui consiste à vérifier que la base n'existe pas déjà, et autres
' modules pour déterminer le nom de la base...
' Création d'une table simple : Nationalité
With tbl
.Name = "Nationalite"
' ce qui suit est indispensable pour jouer avec les properties des champs
Set .ParentCatalog = cat
' Permier champ : clé primaire
.Columns.Append "ID_Nationalite", adInteger
' Préciser qu'elle est auto-incrémentée
.Columns("ID_Nationalite").Properties("AutoIncrement") = True
' Nouveau champ (on trouve la définition des adInteger et autres dans le MSDN)
.Columns.Append "Nationalite", adVarWChar, 50
' NB : On peut déterminer une valeur par défaut avec :
.Columns("Nationalite").Properties("Default") = "France"
' Création d'un champ OLE pour y inclure une image :
.Columns.Append "Image", adLongVarBinary
End With
' Précision que les champs ne sont pas en "required"... le nom de la properties
' est explicite comme vous voyez...
For i = 0 To 2
tbl.Columns.Item(i).Properties("Nullable") = True
Next i
cat.Tables.Append tbl
' Création de la clé primaire à proprement parler
tbl.Keys.Append "ClePrimaire", adKeyPrimary, "ID_Nationalite", "Nationalite"
' Pareil pour une table DVD...
' Commentaires sur les seuls éléments nouveaux
Set tbl = New ADOX.Table
With tbl
.Name = "DVD"
Set .ParentCatalog = cat
.Columns.Append "ID_DVD", adInteger
.Columns("ID_DVD").Properties("AutoIncrement") = True
.Columns.Append "TitreVO", adVarWChar, 75
.Columns.Append "TitreVF", adVarWChar, 75
.Columns.Append "Description", adVarWChar, 150
.Columns.Append "ID_Nationalite", adInteger
.Columns.Append "isFilm", adBoolean
End With
' !!! ATTENTION : l'expérience montre que MEME SI LA PROPERTIES EST PRESENTE,
' il n'est pas possible de mettre un champ en NON-required (pas d'erreur) s'il est
' déclaré en adBoolean !!!!
For i = 0 To 4
tbl.Columns.Item(i).Properties("Nullable") = True
Next i
cat.Tables.Append tbl
tbl.Keys.Append "ClePrimaire", adKeyPrimary, "ID_DVD", "DVD"
' Création d'une clé étrangère avec la table précédente
tbl.Keys.Append "DVDID_Nationalite", _
adKeyForeign, "ID_Nationalite", "Nationalite", "ID_Nationalite"
' Créations d'index de recherche
tbl.Keys.Append "DVDTitreVF", adKeyUnique, "TitreVF", "DVD", "TitreVF"
tbl.Keys.Append "DVDTitreVO", adKeyUnique, "TitreVO", "DVD", "TitreVO"
End Sub
Conclusion :
Première participation à la communauté VB France ;-)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.