Compartir a través de


Uso de las extensiones de Visual C++

Se aplica a: Access 2013, Office 2013

Interfaz IADORecordBinding

Las Extensiones de Microsoft Visual C++ para ADO asocian o enlazan los campos de un objeto Recordset a las variables de C/C++. Cuando cambia la actual fila 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 asocia los campos a las variables de C/C++. El método AddNew agrega una fila nueva al objeto Recordset enlazado. El método Update rellena los campos en las nuevas filas del objeto Recordset o actualiza los campos en las filas existentes con el valor de las variables de C/C++.

La interfaz IADORecordBinding la implementa el objeto Recordset. La implementación no se realiza mediante código del usuario.

Entradas de enlace

Las Extensiones de Visual C++ para ADO asignan los campos de un objeto Recordset a las 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 los datos numéricos, datos 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 CADORecordBinding de Extensiones de Visual C++. La clase CADORecordBinding la definen internamente las macros de entradas 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 los datos entre los campos y las variables. OLE DB define los datos como datos que se componen de tres partes: un búfer donde se almacenan los datos, un estado que indica si un campo se ha almacenado correctamente en el búfer o cómo debe restaurarse la variable en el campo, y la longitud de los datos. (Si desea obtener más información, vea el Capítulo 6 de Referencia del programador de OLE DB: Obtener y establecer datos.)

Archivo de encabezado

Incluya el archivo siguiente en la aplicación para que pueda utilizar las Extensiones de Visual C++ para ADO:

 
#include <icrsint.h> 

Enlazar campos del objeto Recordset

Para enlazar campos del objeto Recordset a las variables de C/C++

  1. Cree una clase derivada de la clase CADORecordBinding.

  2. Especifique las entradas de enlace y las correspondientes variables de C/C++ en la clase derivada. Inserte las entradas de enlace entre las macros BEGIN ADO BINDING y END ADO BINDING. No termine las macros con comas ni signos de punto y coma. Cada macro especifica automáticamente los delimitadores apropiados. Especifique una entrada de enlace por cada campo que se va a asignar a una variable de C/C++. Utilice un miembro apropiado 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 asociar los campos del objeto Recordset a las variables de C/C++.

Vea Ejemplo de Extensiones de Visual C++ para obtener más información.

Métodos de interfaz

La interfaz IADORecordBinding tiene tres métodos: BindToRecordset, AddNew y Update. El único argumento de 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 los homónimos de ADO de sus métodos.

Sintaxis

El método BindToRecordset asocia los campos del objeto Recordset a las variables de C/C++.

BindToRecordset(CADORecordBinding *binding)

El método AddNew invoca su homónimo, el método AddNew de ADO, para agregar una fila nueva 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 entradas de enlace

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

Hay 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, son también tipos de longitud fija. Cada familia tiene diferentes conjuntos de parámetros de modo que se puede excluir la información de enlace que no sea de interés.

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

Inicio de entradas de enlace

BEGIN_ADO_BINDING(Clase)

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)

Finalización de entradas de enlace

END_ADO_BINDING()

Parámetro

Descripción

Class

Clase en la que se definen las entradas de enlace y las variables de C/C++.

Ordinal

Número ordinal, a partir de 1, del campo del objeto 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 del objeto Recordset se convertirá en este tipo de datos si es necesario.

Buffer

Nombre de la variable de C/C++ donde se almacenará el campo del objeto Recordset.

Size

Tamaño máximo, en bytes, de Buffer. Si Buffer va a contener una cadena de longitud variable, deje espacio para un cero final.

Estado

Nombre de una variable que va a indicar si el contenido de Buffer es válido y si la conversión del campo en DataType se ha realizado correctamente. Los dos valores más importantes de esta variable son adFldOK y adFldNull, es decir, la conversión se ha realizado correctamente y el valor del campo es VARIANT de tipo VT_NULL y no está vacío, respectivamente. Los posibles valores de Status figuran en la siguiente tabla "Valores de Status".

Modify

Marca de operador booleano. Si su valor es TRUE, indica que ADO puede actualizar el correspondiente campo de Recordset con el valor de Buffer. Establezca el valor del parámetro booleano Modify en TRUE para que ADO pueda actualizar el campo enlazado. Establézcalo en FALSE si desea examinar el campo sin cambiarlo.

Precision

Número de dígitos que se pueden representar en una variable numérica.

Scale

Número de posiciones de decimales en una variable numérica.

Length

Nombre de una variable de cuatro bytes que va a contener la longitud real de los datos en Buffer.

Valores de Status

El valor de la variable Status indica si un campo se ha copiado correctamente en una variable.

Al configurar los datos, puede que el valor de Status sea adFldNull para indicar que el campo del objeto Recordset debe establecerse en null.

Constante

Valor

Descripción

adFldOK

0

Se ha devuelto un valor de campo que no sea null.

adFldBadAccessor

1

El enlace no es válido.

adFldCantConvertValue

2

El valor no se ha podido convertir por motivos que no sean la falta de coincidencia de los signos o el desbordamiento de datos.

adFldNull

3

Al obtener un campo, indica que se ha devuelto un valor null. Cuando establece un campo, indica que el campo debe establecerse en NULL cuando no puede codificar NULL por sí mismo (por ejemplo, una matriz de caracteres o un entero).

adFldTruncated

4

Se han truncado los datos de longitud variable o los dígitos numéricos.

adFldSignMismatch

5

El valor tiene signo y el tipo de datos no lo tiene.

adFldDataOverFlow

6

El valor es mayor que el valor que se puede almacenar en el tipo de datos.

adFldCantCreate

7

El campo y el tipo de columna desconocidos ya están abiertos.

adFldUnavailable

8

No se ha podido determinar el valor del campo. Por ejemplo, en un nuevo campo no asignado sin valor predeterminado.

adFldPermissionDenied

9

Al actualizar, no hay permiso para escribir datos.

adFldIntegrityViolation

10

Al actualizar, el valor de campo infringirá la integridad de las columnas.

adFldSchemaViolation

11

Al actualizar, el valor de campo infringirá el esquema de las columnas.

adFldBadStatus

12

Al actualizar, parámetro de estado no válido.

adFldDefault

13

Al actualizar, se ha utilizado un valor predeterminado.