|
Программирование >> Руководство по созданию web приложений
В поле 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 <
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |