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


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

Интерфейс IADORecordBinding

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

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

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

Привязка записей

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

ADO внутренне сопоставляет параметры в этих макросах со структурой OLE DBBINDING и создает объект доступа OLE DB для управления перемещением и преобразованием данных между полями и переменными. 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 из набора записей. Затем вызовите метод BindToRecordset , чтобы привязать поля Recordset к переменным C/C++.

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

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

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

Синтаксис

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

BindToRecordset(CADORecordBinding *binding)

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

AddNew(CADORecordBinding *binding)

Метод Update вызывает своего тезку, метод ADO Update , для обновления набора записей.

Update(CADORecordBinding *binding)

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

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

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

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

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

BEGIN_ADO_BINDING(класс)

Данные Fixed-Length

ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)

ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)

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

ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modify)

ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modify)

Данные Variable-Length

ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Size, Status, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)

ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, DataType, Buffer, Size, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Size, Modify)

Завершение записей привязки

END_ADO_BINDING()

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

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

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

Задайте для параметра Boolean modify значение TRUE, чтобы разрешить ADO обновлять связанное поле, и ЗНАЧЕНИЕ FALSE, если вы хотите проверить поле, но не изменить его.
Точность Число цифр, которые могут быть представлены в числовой переменной.
Масштабирование Число десятичных разрядов в числовой переменной.
Длина Имя четырехбайтовой переменной, которая будет содержать фактическую длину данных в буфере.

Индикаторы состояния

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

При задании данных для параметра Состояние может быть задано значение adFldNull , чтобы указать, что для поля Recordset должно быть задано значение 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++