Compartir vía


Extensiones de Visual C++

Interfaz IADORecordBinding

Las extensiones de Microsoft Visual C++ para ADO asocian o enlazan campos de un objeto Recordset a variables de C/C++. Cada vez que cambia la fila actual del objeto Recordset enlazado, todos los campos enlazados del objeto Recordset se copian en las variables de C/C++. Si es necesario, los datos copiados se convierten en el tipo de datos declarado de la variable de C/C++.

El método BindToRecordset de la interfaz IADORecordBinding enlaza campos a variables de C/C++. El método AddNew agrega una nueva fila al objeto Recordset enlazado. El método Update rellena los campos de filas nuevas del objeto Recordset o actualiza los campos de las filas existentes, con el valor de las variables de C/C++.

La interfaz IADORecordBinding se implementa mediante el objeto Recordset. No codifique la implementación por su cuenta.

Entradas de enlace

Las extensiones de Visual C++ para ADO asignan campos de un objeto Recordset a variables de C/C++. La definición de una asignación entre un campo y una variable se denomina entrada de enlace. Las macros proporcionan entradas de enlace para datos numéricos, de longitud fija y de longitud variable. Las entradas de enlace y las variables de C/C++ se declaran en una clase derivada de la clase Extensiones de Visual C++, CADORecordBinding. La clase CADORecordBinding se define internamente mediante las macros de entrada de enlace.

ADO asigna internamente los parámetros de estas macros a una estructura DBBINDING de OLE DB y crea un objeto Accessor de OLE DB para administrar el movimiento y la conversión de datos entre campos y variables. OLE DB define los datos que constan de tres partes: un búfer donde se almacenan los datos; un estado que indica si un campo se almacenó correctamente en el búfer o cómo se debe restaurar la variable en el campo; y la longitud de los datos. (Vea Obtener y establecer datos (OLE DB) en la referencia del programador de OLE DB para obtener más información).

Archivo de encabezado

Incluya el siguiente archivo en la aplicación para poder usar las extensiones de Visual C++ para ADO:

#include <icrsint.h>

Enlazar campos del conjunto de registros

Para enlazar campos de conjuntos de registros a variables de C/C++

  1. Cree una clase derivada de la clase CADORecordBinding.

  2. Especifique las entradas de enlace y las variables de C/C++ correspondientes en la clase derivada. Escriba entre corchetes las entradas de enlace entre las macros BEGIN_ADO_BINDING y END_ADO_BINDING. No finalice las macros con comas ni punto y coma. Cada macro especifica automáticamente los delimitadores adecuados.

    Especifique una entrada de enlace para cada campo que se asignará a una variable de C/C++. Use un miembro adecuado de la familia de macros ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRY o ADO_VARIABLE_LENGTH_ENTRY.

  3. En la aplicación, cree una instancia de la clase derivada de CADORecordBinding. Obtenga la interfaz IADORecordBinding del objeto Recordset. A continuación, llame al método BindToRecordset para enlazar los campos Recordset a las variables de C/C++.

Para obtener más información, vea el Ejemplo de extensiones de Visual C++.

Métodos de interfaz

La interfaz IADORecordBinding tiene tres métodos: BindToRecordset, AddNew y Update. El único argumento para cada método es un puntero a una instancia de la clase derivada de CADORecordBinding. Por lo tanto, los métodos AddNew y Update no pueden especificar ninguno de los parámetros de sus homónimos de métodos de ADO.

Sintaxis

El método BindToRecordset asocia los campos Recordset con variables de C/C++.

BindToRecordset(CADORecordBinding *binding)

El método AddNew invoca sus homónimos, el método AddNew de ADO, para agregar una nueva fila al objeto Recordset.

AddNew(CADORecordBinding *binding)

El método Update invoca su homónimo, el método Update de ADO, para actualizar el objeto Recordset.

Update(CADORecordBinding *binding)

Macros de entrada de enlace

Las macros de entrada de enlace definen la asociación de un campo Recordset y una variable. Una macro inicial y final delimita el conjunto de entradas de enlace.

Se proporcionan familias de macros para datos de longitud fija, como adDate o adBoolean; datos numéricos, como adTinyInt, adInteger o adDouble; y datos de longitud variable, como adChar, adVarChar o adVarBinary. Todos los tipos numéricos, excepto adVarNumeric, también son tipos de longitud fija. Cada familia tiene diferentes conjuntos de parámetros para que pueda excluir información de enlace que no le interese.

Para obtener más información, vea Apéndice A: Tipos de datos, de la Referencia del programador de OLE DB.

Iniciar entradas de enlace

BEGIN_ADO_BINDING(Class)

Datos de longitud fija

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

ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)

Datos numéricos

ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modify)

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

Datos de longitud variable

ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Size, Status, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)

ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, DataType, Buffer, Size, Length, Modify)

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

Terminar entradas de enlace

END_ADO_BINDING()

Parámetro Descripción
Clase Clase en la que se definen las entradas de enlace y las variables de C/C++.
Ordinal Número ordinal, a partir de uno, del campo Recordset correspondiente a la variable de C/C++.
DataType Tipo de datos de ADO equivalente de la variable de C/C++ (vea DataTypeEnum para obtener una lista de tipos de datos válidos). El valor del campo Recordset se convertirá en este tipo de datos, si es necesario.
Buffer Nombre de la variable de C/C++ donde se almacenará el campo Recordset.
Tamaño Tamaño máximo en bytes del búfer. Si el búfer contiene una cadena de longitud variable, deje espacio para un cero de terminación.
Estado Nombre de una variable que indicará si el contenido del búfer es válido y si la conversión del campo a DataType se realizó correctamente.

Los dos valores más importantes para esta variable son adFldOK, lo que significa que la conversión se realizó correctamente; y adFldNull, lo que significa que el valor del campo sería una clase VARIANT de tipo VT_NULL y no simplemente vacía.

Los valores posibles de Status se muestran en la tabla siguiente, "Valores de estado".
Modify Marca booleana; si es TRUE, indica que ADO puede actualizar el campo Recordset correspondiente con el valor contenido en Buffer.

Establezca el parámetro booleano modify en TRUE para permitir que ADO actualice el campo enlazado y en FALSE si desea examinar el campo, pero no cambiarlo.
Precisión Número de dígitos que se pueden representar en una variable numérica.
Escala Número de posiciones decimales en una variable numérica.
Longitud Nombre de una variable de cuatro bytes que contendrá la longitud real de los datos en Buffer.

Valores de estado

El valor de la variable Status indica si un campo se copió correctamente en una variable.

Al establecer los datos, Status puede establecerse en adFldNull para indicar que el campo Recordset debe establecerse en null.

Constante Valor Descripción
adFldOK 0 Se devolvió un valor de campo distinto de null.
adFldBadAccessor 1 El enlace no era válido.
adFldCantConvertValue 2 El valor no se pudo convertir por motivos distintos a un error de coincidencia de signos o desbordamiento de datos.
adFldNull 3 Al obtener un campo, indica que se devolvió un valor null.

Al establecer un campo, indica que el campo debe establecerse en NULL cuando el campo no puede codificar NULL (por ejemplo, una matriz de caracteres o un entero).
adFldTruncated 4 Los datos de longitud variable o los dígitos numéricos se truncaron.
adFldSignMismatch 5 El valor está firmado y el tipo de datos de variable no está firmado.
adFldDataOverFlow 6 El valor es mayor de lo que podría almacenarse en el tipo de datos variable.
adFldCantCreate 7 Tipo de columna y campo desconocidos que ya están abiertos.
adFldUnavailable 8 No se pudo determinar el valor de campo; por ejemplo, en un campo nuevo sin asignar sin ningún valor predeterminado.
adFldPermissionDenied 9 Al actualizar, no hay permiso para escribir datos.
adFldIntegrityViolation 10 Al actualizar, el valor de campo infringiría la integridad de las columnas.
adFldSchemaViolation 11 Al actualizar, el valor de campo infringiría el esquema de la columna.
adFldBadStatus 12 Al actualizar, parámetro de estado no válido.
adFldDefault 13 Al actualizar, se usó un valor predeterminado.

Consulte también

Ejemplo de extensiones de Visual C++Encabezado de extensiones de Visual C++