Поделиться через


Расширения Visual C++

Интерфейс IADORecordBinding

Расширения Microsoft Visual C++ для ADO связывают или привязывают поля объекта Recordset к переменным на C/C++. При каждом изменении текущей строки привязанного набора записей все связанные поля в наборе записей копируются в переменные C/C++. При необходимости скопированные данные преобразуются в объявленный тип данных переменной C/C++.

Метод BindToRecordset интерфейса IADORecordBinding связывает поля с переменными C/C++. Метод AddNew добавляет новую строку в привязанный Набор записей. Метод обновления заполняет поля в новых строках набора записей или обновляет поля в существующих строках значениями переменных C/C++.

Интерфейс IADORecordBinding реализуется объектом Recordset. Вы не кодируйте реализацию самостоятельно.

Записи привязки

Визуальные расширения C++ для ADO сопоставляют поля объекта Recordset с переменными C/C++. Определение сопоставления между полем и переменной называется элементом привязки . Макросы предоставляют записи привязки для числовых данных, данных фиксированной длины и данных переменной длины. Записи привязки и переменные C/C++ объявляются в классе, производном от класса расширений Visual C++, CADORecordBinding. Класс CADORecordBinding определяется внутренне макросами записи привязки.

ADO внутренне сопоставляет параметры в этих макросах с структурой OLE DB DBBINDING и создает объект OLE DB Accessor для управления перемещением и преобразованием данных между полями и переменными. OLE DB определяет данные как состоящие из трех частей: буфер , в котором хранятся данные; статус, указывающее, было ли поле успешно сохранено в буфере или как переменная должна быть восстановлена для поля; и длина данных. (Дополнительные сведения см. в разделе "Получение и настройка данных (OLE DB)" в справочнике для программистов OLE DB.)

Файл заголовка

Включите следующий файл в приложение, чтобы использовать расширения Visual C++ для ADO:

#include <icrsint.h>

Привязка полей набора записей

Привязка полей набора записей к переменным C/C++

  1. Создайте класс, производный от класса CADORecordBinding.

  2. Укажите записи привязки и соответствующие переменные C/C++ в производном классе. Заключите записи привязки между макросами BEGIN_ADO_BINDING и END_ADO_BINDING. Не завершайте макросы запятыми или точками с запятой. Соответствующие разделители задаются автоматически каждым макросом.

    Укажите одну запись привязки для каждого поля, сопоставленного с переменной C/C++. Используйте соответствующий элемент из семейства макросов ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRYили ADO_VARIABLE_LENGTH_ENTRY.

  3. В приложении создайте экземпляр класса, производный от CADORecordBinding. Получите интерфейс IADORecordBinding из Recordset. Затем вызовите метод BindToRecordset, чтобы привязать поля набора записей к переменным C/C++.

Дополнительные сведения см. в примере расширений Visual C++ .

Методы интерфейса

Интерфейс IADORecordBinding имеет три метода: BindToRecordset, AddNewи Update. Единственным аргументом каждого метода является указатель на экземпляр класса, производный от CADORecordBinding. Таким образом, методы AddNew и Update не могут указывать какие-либо параметры, относящиеся к их одноимённым методам ADO.

Синтаксис

Метод BindToRecordset связывает поля Recordset с переменными C/C++.

BindToRecordset(CADORecordBinding *binding)

Метод AddNew вызывает одноимённый метод ADO AddNew, чтобы добавить новую строку в Recordset.

AddNew(CADORecordBinding *binding)

Метод Update вызывает одноимённый метод ADO Update для обновления recordset .

Update(CADORecordBinding *binding)

Макросы привязки

Макросы привязки записей определяют ассоциацию между полем Recordset и переменной. Начальный и конечный макрос задают границы набора записей привязки.

Семейства макросов предоставляются для данных фиксированной длины, таких как adDate или adBoolean; числовые данные, такие как adTinyInt, adIntegerили adDouble; и данные переменной длины, такие как adChar, adVarChar или adVarBinary. Все числовые типы, кроме adVarNumeric, также являются типами фиксированной длины. Каждая семья имеет различные наборы параметров, чтобы исключить сведения о привязке, которые не нужны.

Дополнительные сведения см. в приложении A. Типы данныхсправочника программиста OLE DB.

Начало записей привязки

BEGIN_ADO_BINDING( класс)

Данные Fixed-Length

ADO_FIXED_LENGTH_ENTRY( порядковый номер, тип данных, буфер, состояние, модификация)

ADO_FIXED_LENGTH_ENTRY2( ПорядковыйНомер, ТипДанных, Буфер, Модификация)

Числовые данные

ADO_NUMERIC_ENTRY(порядковый номер, тип данных, буфер, точность, масштаб, состояние, изменить)

ADO_NUMERIC_ENTRY2( порядковость, Тип данных, Буфер, Точность, Масштабирование, Изменить)

Данные Variable-Length

ADO_VARIABLE_LENGTH_ENTRY(Порядковый номер, Тип данных, Буфер, Размер, Состояние, Длина, Изменение)

ADO_VARIABLE_LENGTH_ENTRY2( порядковый номер, DataType, Buffer, Size, Status, Modify)

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

ADO_VARIABLE_LENGTH_ENTRY4(порядковый номер, тип данных, буфер, размер, модификация)

Конечные записи привязки

END_ADO_BINDING()

Параметр Описание
класс Класс, в котором определены записи привязки и переменные C/C++.
порядковый номер Порядковый номер, начиная с одного, поля в Recordset, которое соответствует вашей переменной C/C++.
Тип данных Эквивалентный тип данных ADO переменной C/C++ (см. DataTypeEnum для списка допустимых типов данных). Значение поля набора записей будет преобразовано в этот тип данных при необходимости.
Буфер Имя переменной C/C++, в которой будет храниться поле набора записей.
размера Максимальный размер в байтах буфера . Если буфер будет содержать строку переменной длины, оставьте место для завершающего нуля.
статус Имя переменной, указывающей, является ли содержимое буфера допустимым, а также успешно ли выполнено преобразование поля в DataType.

Двумя наиболее важными значениями для этой переменной являются adFldOK, что означает успешное преобразование; и adFldNull, что означает, что значение поля будет вариантом типа VT_NULL и не просто пустым.

Возможные значения для состояния перечислены в следующей таблице "Значения состояния".
Изменить Логический флаг: Если значение TRUE, то это указывает на то, что ADO разрешено обновлять соответствующее поле Recordset значением, содержащимся в Buffer.

Установите логический параметр в значение TRUE, чтобы ADO мог обновить связанное поле, и FALSE, если вы хотите проверить поле, но не изменять его.
точность Число цифр, которые можно представить в числовой переменной.
Шкала Число десятичных разрядов в числовой переменной.
длина Имя четырехбайтовой переменной, которая будет содержать фактическую длину данных в буфере .

Значения состояния

Значение переменной Status указывает, успешно ли было скопировано поле в переменную.

При настройке данных состояния может быть задано значение adFldNull, чтобы указать, что поле набора записей должно иметь значение NULL.

Постоянный Ценность Описание
adFldOK 0 Возвращается значение поля, отличного от NULL.
adFldBadAccessor 1 Привязка была недопустимой.
adFldCantConvertValue 2 Значение не может быть преобразовано по причинам, отличным от несоответствия знака или переполнения данных.
adFldNull 3 При получении поля указывает, что возвращено значение NULL.

При установке поля указать, что поле должно быть установлено как NULL, если поле не может самостоятельно кодироваться (например, массив символов или NULL целое число).
adFldTruncated 4 Данные переменной длины или числовые цифры усечены.
adFldSignMismatch 5 Значение подписывается, а тип данных переменной не указан.
adFldDataOverFlow 6 Значение превышает максимально допустимое для типа данных переменной.
adFldCantCreate 7 Неизвестный тип столбца и поле уже открыто.
adFldUnavailable 8 Значение поля не удалось определить, например, в новом, неназначаемом поле без значения по умолчанию.
adFldPermissionDenied 9 При обновлении нет разрешения на запись данных.
Нарушение целостности поля (adFldIntegrityViolation) 10 При обновлении значение поля нарушает целостность столбцов.
adFldSchemaViolation 11 При обновлении значение поля нарушает схему столбцов.
adFldBadStatus 12 При обновлении возникает недопустимый параметр состояния.
adFldDefault 13 При обновлении использовалось значение по умолчанию.

См. также

Пример расширений Visual C++ заголовок расширений Visual C++