cs_benedict
Messages postés187Date d'inscriptionmercredi 25 septembre 2002StatutMembreDernière intervention 7 mai 2009
-
6 août 2005 à 09:48
jhary69
Messages postés81Date d'inscriptionjeudi 29 juillet 2004StatutMembreDernière intervention22 juillet 2007
-
7 août 2005 à 11:06
Je voudrais écrire un code pour savoir si la table "toto" existe dans la base "MaBase".
Et si la réponse est non, je voudrais créer la table "toto" en spécifiant les champs et le type de données.
jhary69
Messages postés81Date d'inscriptionjeudi 29 juillet 2004StatutMembreDernière intervention22 juillet 2007 6 août 2005 à 10:02
salut,
Function IsTableExiste(ByVal strNomTable As String) As Boolean
Dim tblTemp As TableDef
On Error GoTo err_IsTableExiste
Set tblTemp = CurrentDb.TableDefs(strNomTable)
IsTableExiste = True
Exit Function
err_IsTableExiste:
If Err.Number = 3265 Then ' element non trouvé dans la collection
IsTableExiste = False
Else
' gerer l'erreur inconnue
End If
End Function
jhary69
Messages postés81Date d'inscriptionjeudi 29 juillet 2004StatutMembreDernière intervention22 juillet 2007 6 août 2005 à 18:25
re,
pour le test de l'existance d'une table effectivement si tu as peu de tables, le for each est tout aussi rapide par contre dans une bdd avec beaucoup de tables (des centaines) ca commence a etre long le parcours
pour le test de l'existance d'un champ on adapte le code de CanisLupus (ou tu adaptes le mien ...)
je crois me souvenir qu'en adox c'est la collection columns qui represente les champs d'une table ... du coup ca donne :
Function ExistChamp(ByVal strNomTable As String, ByVal strNomChamp As String) As Boolean
Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table
Dim col As ADOX.Column
ExistChamp = False
' Ouverture du catalogue
cat.Activeconnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=TaBase.mdb;"
Set tbl = cat.Tables(strNomTable)
'parcours de la collection de colonnes
For Each col In tbl.Columns
If col.Name = strNomChamp Then
ExistChamp = True
Exit For
End If
Next
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 6 août 2005 à 19:27
Jhary69 > d'abord, rien à dire sur ton exemple pour les champs sauf que c'est correct.
Par contre, une base access contenant "des centaines de tables", c'est peu vraisemblable. Sinon, c'est une base mal construite et/ou c'est une "usine à gaz".
J'ai eu à bosser sur des bases "portail" avec des tables ou requetes attachées dans tous les sens (c'est la galère) mais je n'ai jamais eu affaire à "des centaines de tables" sauf dans un cas ou j'ai été obligé de reconstruire tout.
Mais admettons. Dans ce cas, le for each n'est pas beaucoup plus lent que le on error qui, mal utilisé peut provoquer d'autres bugs, et c'est beaucoup plus propre.
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?