IV. OpenSchema▲
Comme je l'ai dit plus avant, il faut utiliser plutôt la méthode OpenSchema de l'objet Connection ADO pour récupérer des informations de structure. Cette méthode est de la forme suivante: Set recordset = connection. OpenSchema (QueryType, Criteria, SchemaID)
Où QueryType donne le type d'information à récupérer, Criteria définit les contraintes sur ces informations
SchemaID n'est utilisé que si QueryType est adSchemaProviderSpecific.
Pour avoir la liste complète des possibilités reportez-vous à l'aide MSDN (Méthode OpenSchema (ADO)).
Comme nous le voyons, les informations renvoyées se trouvent dans un recordset. Pour voir le principe de la méthode, observons le code suivant :
Private
Sub
RecupSchema
(
)
Dim
cnn1 As
ADODB.Connection
, ReqTable As
ADODB.Recordset
, ReqChamp As
ADODB.Recordset
, compteur As
Long
Dim
NomTab As
String
, fso As
FileSystemObject, Fich As
TextStream
Set
fso =
New
FileSystemObject
Set
Fich =
fso.CreateTextFile
(
"d:\Schema1.txt"
, True
)
Set
cnn1 =
New
ADODB.Connection
With
cnn1
.Provider
=
"Microsoft.Jet.OLEDB.4.0;"
.Properties
(
"Jet OLEDB:System database"
) =
"D:\ADOX\system.mdw"
.Open
"Data Source=D:\ADOX\baseheb.mdb ;User Id=Admin; Password="
End
With
Set
ReqTable =
cnn1.OpenSchema
(
adSchemaTables)
Do
Until
ReqTable.EOF
If
ReqTable.Fields
(
"TABLE_TYPE"
) =
"TABLE"
Then
Fich.WriteLine
"Nom : "
&
ReqTable!table_name &
" type: "
&
ReqTable!table_type &
" description : "
&
ReqTable!Description
NomTab =
ReqTable.Fields
(
"TABLE_NAME"
)
Set
ReqChamp =
cnn1.OpenSchema
(
adSchemaColumns, Array
(
Empty
,Empty
, NomTab, Empty
))
Fich.Write
vbTab
For
compteur =
0
To
ReqChamp.Fields.Count
-
1
Fich.Write
ReqChamp.Fields
(
compteur).Name
&
vbTab
Next
compteur
Fich.WriteBlankLines
1
Fich.WriteLine
ReqChamp.GetString
(
adClipString, -
1
, vbTab
,vbCrLf
)
End
If
ReqTable.MoveNext
Loop
Fich.Close
End
Sub
Ce code récupère le schéma des tables dans le recordset ReqTable, et pour chaque table, extrait le schéma des colonnes. Observons la ligne suivante :
Set
ReqChamp =
cnn1.OpenSchema
(
adSchemaColumns, Array
(
Empty
, Empty
, NomTab, Empty
))
Si nous regardons l'aide, nous trouvons dans le tableau :
QueryType |
Criteria |
---|---|
adSchemaColumns |
TABLE_CATALOG |
C'est donc pour obtenir la liste des champs d'une table que j'utilise Array(Empty, Empty, NomTab, Empty). Notez bien que si dans la ligne je remplace « NomTab » par « ReqTable.Fields( »TABLE_NAME« ) » j'obtiens une erreur du fournisseur.
Les constantes QueryType n'étant pas toujours très claires, et de manière générale pour comprendre les notions de schéma et de catalogue -> https://sqlpro.developpez.com/cours/sqlaz/ddl/
De nombreuses valeurs de QueryType pourraient déclencher une erreur. En effet, tout ce qui est lié à un utilisateur demanderait une connexion intégrant le fichier de sécurité (.mdw) pour peu que celui-ci ne soit pas celui enregistré dans la clé de registre. Nous verrons ce point plus en détail lors de l'étude de la sécurité.