Программирование >>  Руководство по созданию web приложений 

1 ... 83 84 85 [ 86 ] 87 88 89 ... 141


В поле iOrdinal записывается номер текущего столбца, увеличенный на еди-нтг.о Это увеличение необходимо потому, что столбцы : - с

единицы, а начальное значение переменной цикла . равно нулю.

В поле записывается текущее смещение данных столбца в буфере

потребителя данных, вычисляемое на каждой итерации цикла с учетом размера данных, хранящихся в столбце. Чтобы использовать поле obValue подобным образом, мы записали в поле . DEPART VALUE.

Для того чтобы возложить задачу памятью на потребителя дан-

ных, мы записываем в поле константу DBMEMOWNEFLCLIENTOWNED.

Так как нагла привязка для работы с набором а не для

передачи параметров команде, в поле необходимо записать

DBPARAMIO NOTPARAM.

Инициализация полей bPrecision, bScale и wType массива pDBBind выполняется путем переписывания значений из массива pColInfo, содержащего информацию о столбцах набора записей, : в результате выполнения команды.

Выполнение привязки данных

После подготовки массива с информацией о мы должны выполнить

создав объект

Для этого мы вначале получаем указатель на интерфейс Wcoessor и сохраняем его в переменной lAccessor*

Далее мы создаем массив структур [ размер которого равен ко-

личеству столбцов в полученном наборе данных: pDBBindStatus = NULL; = new -

Далее мы передаем количество столбцов в наборе данных, указатель на массив pDBBind с информацией о привязке данных, адрес для храпения идентификатора привязки зг и указатель методу . фейса lAccessor на массив структур DBBINDSTATUS:

pDBBind, О, pDBBindStatus);

Через первый параметр методу CreateAccessor передаются флажки свойств объекта привязки, которые определяют назначение этого объекта. Возможные мы перечислены в таблице 5-10. Третий параметр метода CreateAccessor задает количество байт в наборе параметров и не используется при работе с наборами записей. Поэтому для него нулевое значение.



Таблица 5-10. Флажки метода . Флажок

DBACCESSOR INVALID

DBACCESSOR PARAMETERDATA

Описание

Используется методом для того, чтобы сооб-

щить программе о произощедщей ощибке

Объект . по ссылке

Объект описывает привязку столбцов набора

данных

Объект предназначен для привязки значений параметров команды

Создается оптимизированный объект привязки, которая касается использования внутренних буферов

Массив структур DBBIHDSTATII на который передается -

CreateAccessor через последний параметр, позволяет отследить результат при-для каждого столбца.

Структура BBBTiOSl как двойное слово, в которое записыва-

ются флаги результата привязки:

typedef DWORD DBBINDSTATUS;

Эти флажки перечислены в таблице Д i 1 Таблица Флажки результата привязки Флаг

DBBINDSTATUS ОК

Описание

выполнение привязки

Неправильно указан номер

Провайдер не может

данных

Неправильное значение параметров в поле структуры параметров привязки

Ошибка при установке в поле

структуры параметров привязки

недоступен интерфейс, необходимый для привязки данных

Обработка набора записей

Теперь, когда привязка мы можем приступить к извлечению

данных из набора, созданного в результате выполнения команды.

Эта операция выполняется в тройном вложенном цикле.

Внешний цикл вызывает метод BetNextRuws интерфейса IRowset. как это показано ниже:

HROW*

О, 30,

ipflois );

break;



Обработка полей строки

Здесь мы получаем отдельные строки из блока строк, извлеченных только что рассмотренным методом i i as, используя для этого массив идентифика-

торов строк rghRows и метод GetData.

В качестве первого . . . методу GetData передается идентификатор извлекаемой строки. Второй параметр предназначен для передачи идентификатора объекта привязки.

Данные cтpoкизaциcывaютcямeтoдoмGetDataвoблacтьцaмятиp Row Values, передаваемой методу GetData через третий параметр. Размер этой области хранится в переменной CDRow. Он был вычислен на этапе привязки данных.

Теперь мы зададим обработку значений отдельных полей текущей записи, извлеченной из набора. Она выполняется в . третьего уровня вложенности: ULONG

for : - :. =0; nCurrentCol < nColsCount; . eatCo:L++)

if Тип дааннх, хранящихся в поле:

Обработка строк

. .. fhHow, NULL, NULL, NULL);

Первый параметр метода шатяштт определяет идентификатор оглавления набора записей и в нашем случае равен нулю. Второй параметр задает начальное смещение при обработке набора записей. Мы обрабатываем набор с самого начала и определяем для этого параметра нулевое значение. : - третий параметр мы передаем количество строк, извлекаемых для обработки из набора записей за один прием (мы задали произвольное значение, равное 30). Если указать для этого параметра ;: . ; значение, выборка записей будет выполняться в обратном направлении (от конца набора записей к его началу).

С помощью четвертого параметра мы предаем методу GetNextRows адрес переменной, в которую метод запищет количество строк, извлеченных из набора записей. И наконец, пятый параметр задает адрес массива для записи идентификаторов извлеченных строк.

После обработки извлеченных строк мы освобождаем . .. . ..i . : , с

извлеченными строками, с помощью метода Releas.

Обработка извлеченных строк выполняется в цикле второго уровня вложенности:

char* oioiiValues; pRowValues = new аааг[сЬДо*]; ULONG IBoaCoynttr;

for <



1 ... 83 84 85 [ 86 ] 87 88 89 ... 141

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика