Partager via


Extensions pour Visual C++

L'interface IADORecordBinding

Les extensions Microsoft Visual C++ pour ADO associent ou lient les champs d’un objet Recordset aux variables C/C++. Chaque fois que la ligne actuelle de l’objet Recordset lié change, tous les champs liés du jeu d’enregistrements sont copiés dans les variables C/C++. Si nécessaire, les données copiées sont converties en type de données déclaré de la variable C/C++.

La méthode BindToRecordset de l’interface IADORecordBinding lie des champs à des variables C/C++. La méthode AddNew ajoute une nouvelle ligne au Recordset lié . La méthode Update remplit les champs dans de nouvelles lignes du jeu d’enregistrements , ou met à jour les champs dans les lignes existantes, avec la valeur des variables C/C++.

L’interface IADORecordBinding est implémentée par l’objet Recordset. Vous ne codez pas l’implémentation vous-même.

Entrées de liaison

Les extensions Visual C++ pour ADO associent les champs d'un objet Recordset à des variables C/C++. La définition d’un mappage entre un champ et une variable est appelée entrée de liaison . Les macros fournissent des entrées de liaison pour les données numériques, de longueur fixe et de longueur variable. Les entrées de liaison et les variables C/C++ sont déclarées dans une classe dérivée de la classe Extensions Visual C++, CADORecordBinding. La classe CADORecordBinding est définie en interne par les macros d’entrée de liaison.

ADO associe en interne les paramètres de ces macros à une structure DBBINDING OLE DB et crée un objet Accessor OLE DB pour gérer le déplacement et la conversion des données entre les champs et les variables. OLE DB définit les données en trois parties : une mémoire tampon où les données sont stockées ; un état qui indique si un champ a été correctement stocké dans la mémoire tampon, ou comment la variable doit être restaurée sur le champ ; et la longueur des données. (Pour plus d’informations, consultez obtenir et définir des données (OLE DB)dans la référence du programmeur OLE DB.)

Fichier d’en-tête

Incluez le fichier suivant dans votre application pour utiliser les extensions Visual C++ pour ADO :

#include <icrsint.h>

Champs de liaison du jeu d’enregistrements

Pour lier des champs recordset à des variables C/C++

  1. Créez une classe dérivée de la classe CADORecordBinding.

  2. Spécifiez les entrées de liaison et les variables C/C++ correspondantes dans la classe dérivée. Crocheter les entrées de liaison entre les macros BEGIN_ADO_BINDING et END_ADO_BINDING. Ne terminez pas les macros avec des virgules ou des points-virgules. Les délimiteurs appropriés sont spécifiés automatiquement par chaque macro.

    Spécifiez une entrée de liaison pour chaque champ à mapper à une variable C/C++. Utilisez un membre approprié à partir du ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRYou ADO_VARIABLE_LENGTH_ENTRY famille de macros.

  3. Dans votre application, créez une instance de la classe dérivée de CADORecordBinding. Obtenez l'interface IADORecordBinding à partir du Recordset . Appelez ensuite la méthode BindToRecordset pour lier le jeu d’enregistrements champs aux variables C/C++.

Pour plus d’informations, consultez l’exemple d'extensions Visual C++ .

Méthodes d’interface

L’interface IADORecordBinding a trois méthodes : BindToRecordset, AddNew, et Update. L’argument unique de chaque méthode est un pointeur vers une instance de la classe dérivée de CADORecordBinding. Par conséquent, les méthodes AddNew et Update ne peuvent pas spécifier les paramètres de leurs noms de méthode ADO.

Syntaxe

La méthode BindToRecordset associe les champs Recordset aux variables C/C++.

BindToRecordset(CADORecordBinding *binding)

La méthode AddNew appelle sa méthode homonyme, la méthode ADO AddNew, pour ajouter une nouvelle ligne au jeu d'enregistrements .

AddNew(CADORecordBinding *binding)

La méthode Update appelle son homonyme, la méthode ADO Update, pour mettre à jour le Jeu d’enregistrements .

Update(CADORecordBinding *binding)

Macros d’entrée de liaison

Les macros de liaison d'entrée définissent l'association d'un champ de Recordset et d'une variable. Une macro de début et de fin délimite l’ensemble d’entrées de liaison.

Les familles de macros sont fournies pour les données de longueur fixe, telles que adDate ou adBoolean; données numériques, telles que adTinyInt , adIntegerou adDouble; et les données de longueur variable, telles que adChar, adVarChar ou adVarBinary. Tous les types numériques, à l’exception de adVarNumeric, sont également des types de longueur fixe. Chaque famille a des ensembles de paramètres différents, ce qui vous permet d'exclure des données de liaison sans intérêt.

Pour plus d’informations, consultez annexe A : Types de données, de la référence du programmeur OLE DB.

Initialiser les entrées de liaison

BEGIN_ADO_BINDING(classe)

Fixed-Length Données

ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)

ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)

Données numériques

ADO_NUMERIC_ENTRY(Ordinaux, TypeDeDonnée, Tampon, Précision, Échelle, Statut, Modifier)

ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modify)

Variable-Length données

ADO_VARIABLE_LENGTH_ENTRY(Ordre, TypeDeDonnées, Buffer, Taille, Statut, Longueur, Modifier)

ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Taille, Statut, Modifier)

ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, TypeDeDonnées, Tampon, Taille, Longueur, Modifier)

ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Size, Modify)

Terminer les entrées de liaison

END_ADO_BINDING()

Paramètre Description
classe Classe dans laquelle les entrées de liaison et les variables C/C++ sont définies.
Ordinal Nombre ordinal, à partir de un, du champ du jeu d'enregistrements correspondant à votre variable C/C++.
TypeDeDonnées Type de données ADO équivalent de la variable C/C++ (voir DataTypeEnum pour obtenir la liste des types de données valides). Si nécessaire, la valeur du Recordset champ sera convertie en ce type de données.
de mémoire tampon Nom de la variable C/C++ où le champ Recordset sera stocké.
Taille Taille maximale en octets de de mémoire tampon. Si le tampon contient une chaîne de longueur variable, prévoyez de l'espace pour un caractère nul de fin.
Statut Nom d’une variable qui indique si le contenu de tampon est valide et si la conversion du champ en DataType a réussi.

Les deux valeurs les plus importantes pour cette variable sont adFldOK, ce qui signifie que la conversion a réussi ; et adFldNull, ce qui signifie que la valeur du champ serait un VARIANT de type VT_NULL et non simplement vide.

Les valeurs possibles pour 'état sont répertoriées dans le tableau suivant, « Valeurs d’état ».
Modifier Indicateur booléen ; si TRUE, indique qu’ADO est autorisé à mettre à jour le champ du Recordset correspondant avec la valeur contenue dans Buffertampon.

Définissez le paramètre booléen modifier sur TRUE pour permettre à ADO de mettre à jour le champ lié et FALSE si vous souhaitez examiner le champ, mais pas le modifier.
Précision Nombre de chiffres qui peuvent être représentés dans une variable numérique.
Échelle Nombre de décimales dans une variable numérique.
longueur Nom d’une variable de quatre octets qui contiendra la longueur réelle des données dans mémoire tampon.

Valeurs de statut

La valeur de la variable Status indique si un champ a été correctement copié dans une variable.

Lorsque vous définissez des données, le statut peut être défini à adFldNull pour indiquer que le champ Recordset doit être null.

Constant Valeur Description
adFldOK 0 Une valeur de champ non null a été retournée.
adFldBadAccessor 1 La liaison n’était pas valide.
adFldCantConvertValue 2 La valeur n’a pas pu être convertie pour des raisons autres que l’incompatibilité de signe ou le dépassement de capacité.
adFldNull 3 Lors de l'obtention d'un champ, cela indique qu'une valeur null a été retournée.

Lorsque vous définissez un champ, indique que le champ doit être défini sur NULL lorsque le champ ne peut pas encoder NULL lui-même (par exemple, un tableau de caractères ou un entier).
adFldTruncated 4 Les données de longueur variable ou les chiffres numériques ont été tronqués.
adFldSignMismatch 5 La valeur est signée et le type de données de la variable est non signé.
adFldDataOverFlow 6 La valeur est supérieure à celle pouvant être stockée dans le type de données variable.
adFldCantCreate 7 Type de colonne inconnu et champ déjà ouvert.
adFldUnavailable 8 La valeur du champ n’a pas pu être déterminée, par exemple, sur un nouveau champ non attribué sans valeur par défaut.
adFldPermissionDenied 9 Lors de la mise à jour, aucune autorisation d’écrire des données.
adFldIntegrityViolation 10 Lors de la mise à jour, la valeur du champ enfreint l’intégrité des colonnes.
adFldSchemaViolation 11 Lors de la mise à jour, la valeur du champ enfreint le schéma de colonne.
adFldBadStatus 12 Lors de la mise à jour, paramètre d’état non valide.
adFldDefault 13 Lors de la mise à jour, une valeur par défaut a été utilisée.

Voir aussi

Exemple d'extensions Visual C++En-tête d'extensions Visual C++