Partager via


Jeu d'enregistrements : utilisation d'éléments de données volumineux (ODBC)

Mise à jour : novembre 2007

La présente rubrique s'applique aux classes ODBC MFC et aux classes DAO MFC.

Remarque :

Si vous utilisez les classes DAO MFC, gérez les éléments de données volumineux avec la classe CByteArray plutôt qu'avec la classe CLongBinary. Si vous utilisez les classes ODBC MFC avec l'extraction de lignes en bloc, utilisez CLongBinary de préférence à CByteArray. Pour plus d'informations sur l'extraction de lignes en bloc, consultez Jeu d'enregistrements : extraction globale d'enregistrements (ODBC).

Imaginons que votre base de données puisse stocker des éléments de données volumineux, comme les bitmaps (photos du personnel, cartes, photos de produits, objets OLE, etc.). Ce type de données est souvent désigné par le terme d'objet BLOB (Binary Large OBject) pour les raisons suivantes:

  • Chaque valeur de champ est volumineuse.

  • Contrairement aux données numériques et autres types de données simples, il est impossible de prédire leur taille.

  • Les données sont sans forme du point de vue de votre programme.

La présente rubrique explique quel type de prise en charge fournissent les classes de base de données pour travailler avec ces objets.

Gestion d'objets volumineux

Les jeux d'enregistrements permettent de résoudre de deux façons la difficulté liée à la gestion des objets BLOB. Vous pouvez utiliser les classes CByteArray ou CLongBinary. En règle générale, c'est CByteArray qui recueille la majorité des suffrages.

CByteArray nécessite un traitement plus complexe que CLongBinary, mais ses capacités sont supérieures, comme décrit dans CByteArray, classe. CLongBinary est décrite brièvement dans Classe CLongBinary.

Pour plus d'informations sur l'utilisation de CByteArray dans le cas d'éléments de données volumineux, consultez la Note technique 45.

Classe CByteArray

CByteArray est l'une des classes de collection MFC. Un objet CByteArray stocke un tableau dynamique d'octets, et la taille d'un tableau peut être augmentée si nécessaire. La classe permet un accès rapide sur l'index, comme dans le cas des tableaux C++ intégrés. Les objets CByteArray peuvent être sérialisés et faire l'objet d'un dump à des fins de diagnostic. La classe fournit les fonctions membres permettant d'obtenir et de définir les octets spécifiés, d'insérer ou d'ajouter des octets, et de supprimer un octet ou leur totalité. Ces fonctions facilitent l'analyse des données binaires. Par exemple, si l'objet binaire est un objet OLE, il se peut que vous ayez à passer par des octets d'en-tête pour atteindre l'objet lui-même.

Utilisation de CByteArray dans les jeux d'enregistrements

En attribuant à un membre de données de type champ de votre enregistrement le type CByteArray, vous fournissez une base fixe à partir de laquelle RFX peut gérer le transfert d'un tel objet entre votre jeu d'enregistrements et la source de données, et grâce à laquelle vous pouvez manipuler les données à l'intérieur de l'objet. RFX a besoin d'un emplacement particulier pour les données récupérées, et vous-même avez besoin d'un moyen d'accès aux données sous-jacentes.

Pour plus d'informations sur l'utilisation de CByteArray dans le cas d'éléments de données volumineux, consultez la Note technique 45.

Classe CLongBinary

Un objet CLongBinary n'est qu'un simple shell abritant le handle HGLOBAL d'un bloc de stockage alloué dans le tas. Quand RFX lie une colonne de table contenant un objet binaire volumineux, il alloue le handle HGLOBAL quand il doit transférer les données vers le jeu d'enregistrements et stocke le handle dans le champ CLongBinary du jeu d'enregistrements.

À votre tour, vous utilisez le handle HGLOBAL, m_hData, pour travailler avec les données elles-mêmes, les utilisant comme vous le feriez pour toute donnée du handle. C'est sur ce point que CByteArray offre des capacités supplémentaires.

Attention :

Les objets CLongBinary ne peuvent pas servir de paramètres dans les appels de fonction. De plus, leur implémentation, qui appelle ::SQLGetData, ralentit nécessairement les performances de défilement dans le cas d'un instantané affichable par ce biais-là. Cela peut également être vrai quand vous utilisez vous-même un appel ::SQLGetData pour récupérer les colonnes de schéma dynamiques.

Voir aussi

Concepts

Jeu d'enregistrements (ODBC)

Jeu d'enregistrements : calculs de totaux et autres résultats de regroupement (ODBC)

Record Field Exchange (RFX)