Шаг 16 - Читаем записи DBBINDING и DBBINDSTATUS

Настало время нам записи прочитать. Мы долго и нудно к этому подходили и подошли довольно близко. Итак, для того, что бы читать данные. Но для начала нам нужна структура DBBINDING. Эта структура связывает одну колонку с буфером и включает информацию о буфере.

typedef struct tagDBBINDING 
{   
	ULONG iOrdinal;		//Номер колонки
	ULONG obValue;		//Смещение в байтах буфера до значения
	ULONG obLength;		//Смещение в байтах буфера до длины
	ULONG obStatus;		//Смещение в байтах буфера до статуса
	ITypeInfo * pTypeInfo;	//Зарезервировано
	DBOBJECT * pObject;	//Указатель на DBOBJECT структуру 
	DBBINDEXT * pBindExt;	//Указатель на DBBINDEXT структуру
	DBPART dwPart;		//Определяет что будет привязано к колонке
	DBMEMOWNER dwMemOwner;	//Тип закрепления памяти
	DBPARAMIO eParamIO;	//Параметры ввода вывода
	ULONG cbMaxLen;		//Размер структуры данных
	DWORD dwFlags;		//Тип формата возвращаемых данных
	DBTYPE wType;		//Тип данных в буфере
	BYTE bPrecision;		//Максимальная точно возвращаемых данных
	BYTE bScale;		//Используется для получения числовых данных
} DBBINDING;

Эту структуру нам нужно объявить в программе.

// переменные для получения структуры колонок и создания  Accessor
DBBINDING* pDBBindings;  

Выделить под нее память, а после того заполнить данными.

pDBBindings = new DBBINDING[nCols];
for (ULONG nCol = 0; nCol < nCols; nCol++)
{
	pDBBindings[nCol].iOrdinal = nCol+1;
	pDBBindings[nCol].obValue = cbRow;
	pDBBindings[nCol].obLength = 0;
	pDBBindings[nCol].obStatus = 0;
	pDBBindings[nCol].pTypeInfo = NULL;
	pDBBindings[nCol].pObject = NULL;
	pDBBindings[nCol].pBindExt = NULL;
	pDBBindings[nCol].dwPart = DBPART_VALUE;
	pDBBindings[nCol].dwMemOwner = DBMEMOWNER_CLIENTOWNED;
	pDBBindings[nCol].eParamIO = DBPARAMIO_NOTPARAM;
	pDBBindings[nCol].cbMaxLen = pColumnsInfo[nCol].ulColumnSize + 1;
	pDBBindings[nCol].dwFlags = 0;
	pDBBindings[nCol].wType = pColumnsInfo[nCol].wType;
	pDBBindings[nCol].bPrecision = pColumnsInfo[nCol].bPrecision;
	pDBBindings[nCol].bScale = pColumnsInfo[nCol].bScale;
	cbRow += pDBBindings[nCol].cbMaxLen;
}

Массив структур должен быть равный количеству колонок. Часть данных мы берем из структуры pColumnsInfo полученной нами ранее. После того как структура нам будет не нужно ее надо удалить. Вторая структура, которая нам необходима это DBBINDSTATUS.

delete [] pDBBindings;

Второе значение, которое нам необходимо это DBBINDSTATUS его нужно объявить и не одно а указатель на массив.

// переменные для получения структуры колонок и создания  Accessor  
DBBINDSTATUS* pDBBindStatus = NULL;   

Создать массив этих значений.

pDBBindStatus = new DBBINDSTATUS[nCols];

И удалить когда использовать его будет уже не нужно.

delete [] pDBBindStatus;

Само оно DWORD, но может включать только конкретные значения объявленные в перечислении DBBINDSTATUSENUM.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.07.2001