Conjunto de registros: Trabajar con grandes elementos de datos (ODBC)

Este tema se aplica a las clases ODBC de MFC y a las clases DAO de MFC.

Nota:

Si usa las clases DAO de MFC, administre los elementos de datos grandes con la clase CByteArray en lugar de la clase CLongBinary. Si usa las clases ODBC de MFC con la captura masiva de filas, use CLongBinary en lugar de CByteArray. Para más información sobre la obtención masiva de filas, vea Conjunto de registros: obtener registros de forma masiva (ODBC).

Supongamos que la base de datos puede almacenar grandes fragmentos de datos, como mapas de bits (fotografías de empleados, mapas, imágenes de productos, objetos OLE, etc.). Este tipo de datos se conoce a menudo como un objeto binario grande (o BLOB) porque:

  • Cada valor de campo es grande.

  • A diferencia de los números y otros tipos de datos simples, no tiene un tamaño predecible.

  • Los datos no son formularios desde la perspectiva del programa.

En este tema se explica la compatibilidad que ofrecen las clases de la base de datos para trabajar con dichos objetos.

Administración de objetos grandes

Los conjuntos de registros tienen dos maneras de resolver la dificultad especial de administrar objetos binarios grandes. Puede usar la clase CByteArray o puede usar la clase CLongBinary. En general, CByteArray es la manera preferida de administrar datos binarios grandes.

CByteArray requiere más sobrecarga que CLongBinary pero tiene mayor capacidad, como se describe en la clase CByteArray. CLongBinary se describe brevemente en la clase CLongBinary.

Para obtener información detallada sobre cómo usar CByteArray para trabajar con elementos de datos de gran tamaño, consulte la nota técnica 45.

CByteArray (clase)

CByteArray es una de las clases de colección de MFC. Un objeto CByteArray almacena una matriz dinámica de bytes: la matriz puede crecer si es necesario. La clase proporciona acceso rápido por índice, como con matrices de C++ integradas. Los objetos CByteArray se pueden serializar y volcar con fines de diagnóstico. La clase proporciona funciones miembro para obtener y establecer bytes especificados, insertar y anexar bytes, y quitar un byte o todos los bytes. Estas disposiciones facilitan el análisis de los datos binarios. Por ejemplo, si el objeto binario es un objeto OLE, es posible que tenga que trabajar a través de algunos bytes de encabezado para alcanzar el objeto real.

Uso de CByteArray en conjuntos de registros

Al conceder a un miembro de datos de campo del conjunto de registros el tipo CByteArray, se proporciona una base fija desde la que RFX puede administrar la transferencia de dicho objeto entre el conjunto de registros y el origen de datos y a través del cual puede manipular los datos dentro del objeto. RFX necesita un sitio específico para los datos recuperados, y el usuario una manera de acceder a los datos subyacentes.

Para obtener información detallada sobre cómo usar CByteArray para trabajar con elementos de datos de gran tamaño, consulte la nota técnica 45.

CLongBinary (clase)

Un objeto CLongBinary es un shell simple alrededor de un identificador HGLOBAL de un bloque de almacenamiento asignado en el montón. Cuando enlaza una columna de tabla que contiene un objeto binario grande, RFX asigna el identificador HGLOBAL cuando necesita transferir los datos al conjunto de registros y almacena el identificador en el campo CLongBinary del conjunto de registros.

A su vez, se usa el identificador HGLOBAL, m_hData, para trabajar con los propios datos, operando en ellos como lo haría en cualquier dato del identificador. Aquí es donde CByteArray agrega funcionalidades.

Precaución

Los objetos CLongBinary no se pueden usar como parámetros en las llamadas de función. Además, su implementación, que llama a ::SQLGetData, necesariamente ralentiza el rendimiento de desplazamiento para una instantánea desplazable. Esto también puede ser cierto cuando se usa una llamada ::SQLGetData para recuperar columnas de esquema dinámico.

Consulte también

Conjunto de registros (ODBC)
Conjunto de registros: Obtener cálculos SUM y otros resultados agregados (ODBC)
Intercambio de campos de registros (RFX)