Extensiones de Visual C++
La interfaz IADORecordBinding
Las extensiones de Microsoft Visual C++ para ADO asocian, o enlazan, campos de un objeto Recordset de a variables de C/C++. Cada vez que la fila actual del recordset vinculado cambia, todos los campos vinculados del 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 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 completa los campos de las nuevas filas del 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. Tú no programas la implementación tú mismo.
Entradas de enlace
Las extensiones de Visual C++ para ADO mapean los campos de un objeto Recordset de a variables de C/C++. La definición de una asignación entre un campo y una variable se denomina entrada de vinculación . 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 de 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 de 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. (Consulte 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>
Vinculación de Campos del Conjunto de Registros
Para enlazar campos del conjunto de registros a variables de C/C++
Cree una clase derivada de la clase CADORecordBinding.
Especifique las entradas de enlace y las variables de C/C++ correspondientes en la clase derivada. Encierre las entradas de enlace entre las macros BEGIN_ADO_BINDING y END_ADO_BINDING. No finalice las macros con comas o 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 ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRYo ADO_VARIABLE_LENGTH_ENTRY familia de macros.
En la aplicación, cree una instancia de la clase derivada de CADORecordBinding. Obtenga la interfaz IADORecordBinding del objeto Recordset de. A continuación, llame al método bindToRecordset para enlazar los campos del conjunto de registros de 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, AddNewy 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étodo de ADO.
Sintaxis
El método BindToRecordset asocia los campos Recordset con variables de C/C++.
BindToRecordset(CADORecordBinding *binding)
El método AddNew invoca a su homónimo, el método ADO AddNew, para agregar una nueva fila al Recordset.
AddNew(CADORecordBinding *binding)
El método Update invoca a su homónimo, el método ADO Update, para actualizar el conjunto de registros .
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 para adVarNumeric, también son tipos de longitud fija. Cada familia tiene diferentes conjuntos de parámetros para que puedas excluir la información relevante que no tenga interés.
Para obtener más información, vea Apéndice A: Tipos de datos, de la referencia del programador de OLE DB.
Comenzar entradas de vinculación
BEGIN_ADO_BINDING(de clase)
datos de Fixed-Length
ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)
ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)
Datos numéricos
ADO_NUMERIC_ENTRY(Ordinal, Tipo de Datos, Búfer, Precisión, Escala, Estado, Modificar)
ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modify)
datos de Variable-Length
ADO_VARIABLE_LENGTH_ENTRY(Ordinal, TipoDeDatos, Búfer, Tamaño, Estado, Longitud, Modificar)
ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, TipoDeDatos, Búfer, Tamaño, Estado, Modificar)
ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, TipoDeDato, Buffer, Tamaño, Longitud, Modificar)
ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, TipoDeDato, Búfer, Tamaño, Modificar)
Entradas de enlace final
END_ADO_BINDING()
Parámetro | Descripción |
---|---|
de clase | Clase en la que se definen las entradas de enlace y las variables de C/C++. |
Ordinal | Número ordinal, empezando desde uno, del campo del conjunto de registros correspondiente a la variable de C/C++. |
TipoDeDato | Tipo de datos ADO equivalente de la variable C/C++ (consulte DataTypeEnum para obtener una lista de tipos de datos válidos). El valor del campo del Recordset se convertirá en este tipo de datos si es necesario. |
búfer | Nombre de la variable C/C++ donde se almacenará el campo Recordset. |
de tamaño de | Tamaño máximo en bytes de Búfer. Si Búfer contendrá una cadena de longitud variable, permita espacio para un cero de terminación. |
estado | Nombre de una variable que indicará si el contenido de buffer 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 VARIANTE de tipo VT_NULL y no simplemente vacía. Los valores posibles para Estado se muestran en la tabla siguiente, "Valores de estado". |
Modificar | 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 modificar 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, Estado se puede establecer en adFldNull para indicar que el campo del Recordset debe establecerse en nulo.
Constante | Valor | Descripción |
---|---|---|
adFldOK | 0 | Se devolvió un valor de campo que no es NULL. |
adFldBadAccessor | 1 | La vinculación no era válida. |
adFldNoPuedoConvertirValor | 2 | El valor no se pudo convertir por motivos distintos de la falta de coincidencia de signos o el 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 en sí (por ejemplo, una matriz de caracteres o un entero). |
adFldTruncated | 4 | Los datos de longitud variable o los dígitos numéricos se truncaron. |
Error de discrepancia de signo de campo | 5 | El valor está firmado y el tipo de datos variable no está firmado. |
adFldDataOverFlow | 6 | El valor es mayor de lo que se puede almacenar en el tipo de dato variable. |
adFldCantCreate | 7 | Tipo de columna desconocido y campo ya abierto. |
adFldUnavailable | 8 | No se pudo determinar el valor de campo; por ejemplo, en un campo nuevo sin asignar sin ningún valor predeterminado. |
PermisoParaCampoDenegado | 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 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++