IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Utiliser le modèle ADOX avec Visual Basic


précédentsommairesuivant

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 :

 
Sélectionnez
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 :

 
Sélectionnez
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
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME

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é.


précédentsommairesuivant

Copyright © 2003 bidou. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.