Récupération de métadonnées à l'aide de jeux de lignes du schéma
Parfois, vous devez récupérer des informations sur le fournisseur, le jeu de lignes, la table, les colonnes ou d'autres informations relatives à la base de données sans ouvrir le jeu de lignes. Les données se rapportant à la structure de la base de données sont appelées métadonnées et peuvent être récupérées selon un certain nombre de méthodes différentes. L'une des méthodes consiste à utiliser des jeux de lignes du schéma.
Les modèles OLE DB fournissent un ensemble de classes pour récupérer des informations sur le schéma ; ces classes créent des jeux de lignes de schéma prédéfinis et sont répertoriés dans Classes de jeu de lignes du schéma et classes Typedef.
Notes
Si vous utilisez OLAP et si certains de vos jeux de lignes ne sont pas pris en charge par les classes de jeux de lignes du schéma (vous avez un nombre variable de colonnes, par exemple), vous devez songer à utiliser CManualAccessor ou CDynamicAccessor.Vous pouvez faire défiler les colonnes et utiliser des instructions Case pour gérer les types de données possibles pour chaque colonne.
Modèle catalogue/schéma
ANSI SQL définit un modèle catalogue/schéma pour les magasins de données ; OLE DB utilise ce modèle. Dans ce modèle, les catalogues (les bases de données) contiennent des schémas et les schémas contiennent des tables.
Catalogue Catalogue est une autre appellation de la base de données. Il s'agit d'une collection de schémas connexes. Pour répertorier les catalogues (les bases de données) appartenant à une source de données particulière, utilisez CCatalog. Dans la mesure où de nombreuses bases de données ne possèdent qu'un seul catalogue, les métadonnées sont parfois simplement désignées par informations du schéma.
Schéma Un schéma est une collection d'objets de base de données qui appartiennent à un utilisateur particulier ou qui ont été créés par celui-ci. Pour répertorier les schémas qui appartiennent à un utilisateur donné, utilisez CSchemata.
Dans la terminologie Microsoft SQL Server et ODBC 2.x, un schéma est un propriétaire (par exemple, dbo est un nom de schéma type). SQL Server stocke également les métadonnées dans un ensemble de tables : une table contient une liste de toutes les tables, et une autre table contient une liste de toutes les colonnes. Il n'existe pas d'équivalent au schéma dans une base de données Microsoft Access.
Table Les tables correspondent à des collections de colonnes disposées dans un ordre spécifique. Pour lister les tables définies dans un catalogue (base de données) particulier, et obtenir des informations sur ces tables, utilisez CTables).
Restrictions
Quand vous recherchez des informations sur le schéma, vous pouvez utiliser des restrictions pour spécifier le type d'informations qui vous intéresse. Vous pouvez considérer les restrictions en tant que filtre ou qualificatif dans une requête. Par exemple, dans la requête :
SELECT * FROM authors where l_name = 'pivo'
l_name est une restriction. Il s'agit d'un exemple très simple avec une seule restriction ; les classes de jeux de lignes du schéma acceptent plusieurs restrictions.
Les classes typedef de jeu de lignes du schéma encapsulent tous les jeux de lignes du schéma OLE DB afin que vous puissiez accéder à un jeu de lignes du schéma comme à n'importe quel autre jeu de lignes en l'instanciant et en l'ouvrant. Par exemple, la classe typedef CColumns est définie de la façon suivante :
CRestrictions<CAccessor<CColumnsInfo>
La classe CRestrictions assure la prise en charge des restrictions. Après avoir créé une instance du jeu de lignes du schéma, appelez CRestrictions::Open. Cette méthode retourne un jeu de résultats sur la base des restrictions que vous avez spécifiées.
Pour spécifier des restrictions, consultez Annexe B : jeux de lignes du schéma et recherchez le jeu de lignes que vous utilisez. Par exemple, CColumns correspond au jeu de lignes COLUMNS; cette rubrique répertorie les colonnes de restrictions dans le jeu de lignes COLUMNS : TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Vous devez suivre cet ordre quand vous spécifiez vos restrictions.
Par exemple, si vous souhaitez appliquer une restriction par nom de table, notez que TABLE_NAME est la troisième colonne de restriction, puis appelez Open, en spécifiant le nom de la table voulue comme troisième paramètre de restriction, comme le montre l'exemple suivant.
Pour utiliser des jeux de lignes du schéma
Vous devez inclure le fichier d'en-tête Atldbsch.h (vous avez bien sûr également besoin de Atldbcli.h pour la prise en charge du consommateur).
Instanciez un objet jeu de lignes du schéma dans le fichier d'en-tête du consommateur ou du document. Si vous souhaitez des informations sur la table, déclarez un objet CTables ; si vous voulez des informations sur les colonnes, déclarez un objet CColumns. Cet exemple montre comment récupérer les colonnes dans la table authors :
CDataSource ds; ds.Open(); CSession ss; ss.Open(); CColumns ColumnSchemaRowset; // TABLE_NAME is the third restriction column, so // specify "authors" as the third restriction parameter: hr = ColumnSchemaRowset.Open(ss, NULL, NULL, "authors"); hr = ColumnSchemaRowset.MoveFirst(); while (hr == S_OK) { hr = ColumnSchemaRowset.MoveNext(); }
Pour extraire les informations, accédez aux données membres appropriées de l'objet jeu de lignes du schéma, par exemple, ColumnSchemaRowset.m_szColumnName. Cela correspond à COLUMN_NAME. Pour déterminer à quelle colonne OLE DB correspond chaque donnée membre, consultez CColumns.
À des fins de référence des classes typedef du jeu de lignes du schéma fournies dans les modèles OLE DB, consultez Classes de jeu de lignes du schéma et classes Typedef.
Pour plus d'informations sur les jeux de lignes du schéma OLE DB, y compris les colonnes des restrictions, consultez Annexe B : jeux de lignes du schéma dans le Guide de référence du programmeur OLE DB.
Pour des exemples plus complexes sur la manière d'utiliser des classes de jeux de lignes du schéma, consultez les exemples CatDB et DBViewer.
Pour plus d'informations sur la prise en charge des jeux de lignes du schéma par le fournisseur, consultez Prise en charge des jeux de lignes du schéma.