Comment tester si une table existante dans une base Access ? [Résolu]

cs_benedict 187 Messages postés mercredi 25 septembre 2002Date d'inscription 7 mai 2009 Dernière intervention - 6 août 2005 à 09:48 - Dernière réponse : jhary69 81 Messages postés jeudi 29 juillet 2004Date d'inscription 22 juillet 2007 Dernière intervention
- 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.

Pouvez-vous m'aider ?
Merci de tout coeur.

Benedict
Afficher la suite 

11 réponses

Meilleure réponse
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 6 août 2005 à 14:45
3
Merci
OK, donc essaie ça :

' Coche Microsoft ADO Ext .... dans les références du projet
Function ExistTable(strNomTable As String) As Boolean


Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table

' Ouverture du catalogue
cat.Activeconnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=TaBase.mdb;"

'parcours de la collection de tables
For Each tbl In cat.Tables
If tbl.Name = strNomTable Then
ExistTable = True
Exit Function
End If
Next

ExistTable = False

End Function

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?

Merci cs_CanisLupus 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

jhary69 81 Messages postés jeudi 29 juillet 2004Date d'inscription 22 juillet 2007 Dernière intervention - 6 août 2005 à 10:02
0
Merci
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

A+

Christophe.
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 6 août 2005 à 12:54
0
Merci
Salut,
Qu'utilise-tu pour interroger ta base ? DAO, ADO ?

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 6 août 2005 à 13:00
0
Merci
Je me permettrais tout de même de reprendre le code de jhary69 car je n'aime pas trop les on error quand ce n'est pas nécessaire :

Function IsTableExiste(ByVal strNomTable As String) As Boolean
Dim tblTemp As TableDef

For Each tblTemp In CurrentDb.TableDefs
If tblTemp.Name = strNomTable Then
IsTableExiste = True
Exit Function
End If
Next

IsTableExiste = False


End Function

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
cs_benedict 187 Messages postés mercredi 25 septembre 2002Date d'inscription 7 mai 2009 Dernière intervention - 6 août 2005 à 13:21
0
Merci
Dresseur de puce,

J'utilise ADO

Benedict
cs_benedict 187 Messages postés mercredi 25 septembre 2002Date d'inscription 7 mai 2009 Dernière intervention - 6 août 2005 à 17:00
0
Merci
Merci CanisLupus.


Une autre puce à dompter.

Comment faire pour tester si un champ "titi" existe dans la table "toto" ?

Merci.

Benedict
jhary69 81 Messages postés jeudi 29 juillet 2004Date d'inscription 22 juillet 2007 Dernière intervention - 6 août 2005 à 18:25
0
Merci
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

Set tbl = Nothing

End Function
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 6 août 2005 à 19:27
0
Merci
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 !?
jhary69 81 Messages postés jeudi 29 juillet 2004Date d'inscription 22 juillet 2007 Dernière intervention - 6 août 2005 à 22:06
0
Merci
re,

oki, faut dire que je suis habitué aux usines à gaz sur Access voir meme sur Excel !

A+

Christophe.
cs_benedict 187 Messages postés mercredi 25 septembre 2002Date d'inscription 7 mai 2009 Dernière intervention - 6 août 2005 à 22:40
0
Merci
Désolé de vous embéter, les amis, mais j'ai un problème.

J'ai bien déclaré la fonction ExistChamp et j'ai créé un bouton avec le code suivant :

Sub Command1_Click()
ExistChamp=(strNomTable: = "toto", strNomChamp:= "titi")
End Sub

Ca ne marche pas.
J'ai "erreur de syntaxe : attendu )"

Quel est le code correct pour tester si dans la table "toto" il y a bien un champ "titi"

Benedict
jhary69 81 Messages postés jeudi 29 juillet 2004Date d'inscription 22 juillet 2007 Dernière intervention - 7 août 2005 à 11:06
0
Merci
re,

il y a une erreur sur ta ligne de code :

ExistChamp=(strNomTable: = "toto", strNomChamp:= "titi") ==>syntaxe incorrecte
bRet ExistChamp(strNomTable: "toto", strNomChamp:= "titi") ==> ca devrait mieux marcher comme ca ...

A+

Christophe.

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.