Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lister les tables d'une base depuis Access

3 réponses
Avatar
lyris
Bonjour,

Depuis une application VBA Access, j'ai besoin de comparer les noms de table
d'une base à une chaine de caratère pour savoir si une table qui a le nom de
cette chaine se trouve dans la base de données SQL Server.

pour ça j'ai essayé le code suivant :

For Each tab In catalogBase.Tables
Res = StrComp(tab.Name, chaine, 1)
If Res = 0 Then
GoTo creer_champ
End If
Next

Ca à l'air de fonctionner mais le problème, c'est que le catalog possède
environ 330 tables dont plus de 300 tables systèmes. Mon application est donc
fortement ralentie.
Y a t'il un moyen d'optimiser cela en évitant de consulter les tables
systèmes ?

3 réponses

Avatar
SQLpro [MVP]
lyris a écrit :
Bonjour,

Depuis une application VBA Access, j'ai besoin de comparer les noms de table
d'une base à une chaine de caratère pour savoir si une table qui a le nom de
cette chaine se trouve dans la base de données SQL Server.

pour ça j'ai essayé le code suivant :

For Each tab In catalogBase.Tables
Res = StrComp(tab.Name, chaine, 1)
If Res = 0 Then
GoTo creer_champ
End If
Next

Ca à l'air de fonctionner mais le problème, c'est que le catalog possède
environ 330 tables dont plus de 300 tables systèmes. Mon application est donc
fortement ralentie.
Y a t'il un moyen d'optimiser cela en évitant de consulter les tables
systèmes ?



il serait plus simple de faire une requête du genre :

SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = '...'

dans ce cas si cette requête retourne 1 c'est que la table de nom '...'
existe.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
lyris
Impeccable, ca marche ! merci
Je me demande bien pourquoi j'étais parti dans un truc aussi compliqué.


"SQLpro [MVP]" a écrit :

lyris a écrit :
> Bonjour,
>
> Depuis une application VBA Access, j'ai besoin de comparer les noms de table
> d'une base à une chaine de caratère pour savoir si une table qui a le nom de
> cette chaine se trouve dans la base de données SQL Server.
>
> pour ça j'ai essayé le code suivant :
>
> For Each tab In catalogBase.Tables
> Res = StrComp(tab.Name, chaine, 1)
> If Res = 0 Then
> GoTo creer_champ
> End If
> Next
>
> Ca à l'air de fonctionner mais le problème, c'est que le catalog possède
> environ 330 tables dont plus de 300 tables systèmes. Mon application est donc
> fortement ralentie.
> Y a t'il un moyen d'optimiser cela en évitant de consulter les tables
> systèmes ?

il serait plus simple de faire une requête du genre :

SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = '...'

dans ce cas si cette requête retourne 1 c'est que la table de nom '...'
existe.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Avatar
SQLpro [MVP]
a mon humble avis, comme la plupart des informaticiens :
par manque de connaissance des possibilités de SQL et des SGBDR en
général...

A +


lyris a écrit :
Impeccable, ca marche ! merci
Je me demande bien pourquoi j'étais parti dans un truc aussi compliqué.


"SQLpro [MVP]" a écrit :

lyris a écrit :
Bonjour,

Depuis une application VBA Access, j'ai besoin de comparer les noms de table
d'une base à une chaine de caratère pour savoir si une table qui a le nom de
cette chaine se trouve dans la base de données SQL Server.

pour ça j'ai essayé le code suivant :

For Each tab In catalogBase.Tables
Res = StrComp(tab.Name, chaine, 1)
If Res = 0 Then
GoTo creer_champ
End If
Next

Ca à l'air de fonctionner mais le problème, c'est que le catalog possède
environ 330 tables dont plus de 300 tables systèmes. Mon application est donc
fortement ralentie.
Y a t'il un moyen d'optimiser cela en évitant de consulter les tables
systèmes ?


il serait plus simple de faire une requête du genre :

SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = '...'

dans ce cas si cette requête retourne 1 c'est que la table de nom '...'
existe.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************