Extensions Visual C++
Interface IADORecordBinding
Les extensions Microsoft Visual C++ pour l’association ADO ou la liaison, champs d’un objet Recordset à des variables C/C++. Chaque fois que la ligne actuelle du 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 mappent des 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 mappe en interne les paramètres de ces macros à une structure OLE DB DBBINDING et crée un objet Accesseur 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 comme composées de trois parties : une mémoire tampon où les données sont stockées ; état qui indique si un champ a été correctement stocké dans la mémoire tampon ou comment la variable doit être restaurée dans le champ ; et la longueur des données. (Pour plus d’informations, voir Obtention et définition de 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 afin d’utiliser les extensions Visual C++ pour ADO :
#include <icrsint.h>
Liaison de champs recordset
Pour lier des champs recordset à des variables C/C++
Créez une classe dérivée de la classe CADORecordBinding.
Spécifiez les entrées de liaison et les variables C/C++ correspondantes dans la classe dérivée. Crochetez 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é de la famille de macros ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRY ou ADO_VARIABLE_LENGTH_ENTRY .
Dans votre application, créez une instance de la classe dérivée de CADORecordBinding. Obtenez l’interface IADORecordBinding à partir de l’objet Recordset. Appelez ensuite la méthode BindToRecordset pour lier les champs Recordset 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 son nom, la méthode ADO AddNew , pour ajouter une nouvelle ligne au recordset.
AddNew(CADORecordBinding *binding)
La méthode Update appelle son nom, la méthode ADO Update , pour mettre à jour l’objet Recordset.
Update(CADORecordBinding *binding)
Macros d’entrée de liaison
Les macros d’entrée de liaison définissent l’association d’un champ 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, adInteger ou adDouble; et des 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 afin que vous puissiez exclure des informations de liaison qui ne sont pas intéressantes.
Pour plus d’informations, consultez l’Annexe A : Types de données, de la référence du programmeur OLE DB.
Commencer les entrées de liaison
BEGIN_ADO_BINDING(Class)
Données de longueur fixe
ADO_FIXED_LENGTH_ENTRY(Ordinal, Type de données, Tampon, Statut, Modifier)
ADO_FIXED_LENGTH_ENTRY2(Ordinal, Type de données, Tampon, Modifier)
Données numériques
ADO_NUMERIC_ENTRY(Ordinal, Type de données, Tampon, Précision, Échelle, État, Modifier)
ADO_NUMERIC_ENTRY2(Ordinal, Type de données, Tampon, Précision, Échelle, Modifier)
Type de données de longueur variable
ADO_VARIABLE_LENGTH_ENTRY(Ordinal, Type de données, Tampon, Taille, Statut, Longueur, Modifier)
ADO_VARIABLE_LENGTH_ENTRY(Ordinal, Type de données, Tampon, Taille, Statut, Modifier)
ADO_VARIABLE_LENGTH_ENTRY(Ordinal, Type de données, Tampon, Taille, Longueur, Modifier)
ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, Type de données, Tampon, Taille, Modifier)
Entrées de liaison de terminaison
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, en comptant à partir d’un, du champ Recordset correspondant à votre variable C/C++. |
DataType | 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 champ Recordset est convertie en ce type de données. |
Buffer | Nom de la variable C/C++ où le champ Recordset sera stocké. |
Taille | Taille maximale en octets de la mémoire tampon. Si la mémoire tampon contient une chaîne de longueur variable, autorisez la mise en place d’un zéro de fin. |
État | Nom d’une variable qui indique si le contenu de la mémoire 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 Status sont répertoriées dans le tableau suivant, « Valeurs d’état ». |
Modify | Indicateur booléen ; si true, indique qu’ADO est autorisé à mettre à jour le champ Recordset correspondant avec la valeur contenue dans la mémoire tampon. Définissez le paramètre de modification booléen 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 pouvant être représentés dans une variable numérique. |
Mettre à l'é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 la mémoire tampon. |
Valeurs d'état
La valeur de la variable Status indique si un champ a été correctement copié dans une variable.
Lorsque vous définissez des données, Status peut être défini sur adFldNull pour indiquer que le champ Recordset doit avoir la valeur Null.
Constant | Value | Description |
---|---|---|
adFldOK | 0 | Une valeur de champ non Null a été retournée. |
adFldBadAccessor | 1 | La liaison n’était pas valide. |
adFldCantConvertValue | 2 | Impossible de convertir la valeur des données pour une raison autre que la non-correspondance des signes ou le débordement des données. |
adFldNull | 3 | Lors de l’obtention d’un champ, indique qu’une valeur Null a été retournée. Lors de la définition d’un champ, indique que le champ doit avoir la valeur 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 variable n’est pas signé. |
adFldDataOverFlow | 6 | La valeur est supérieure à celle qui peut être stockée dans le type de données variable. |
adFldCantCreate | 7 | Type de colonne inconnu et champ déjà ouverts. |
adFldUnavailable | 8 | La valeur de 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’écriture de 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
Visual C++ Extensions - Exempled’en-tête d’extensions Visual C++