Использование расширений Visual C++
Область применения: Access 2013, Office 2013
Интерфейс IADORecordBinding
Расширения Microsoft Visual C++ для ADO связывают или привязывают поля объекта Recordset к переменным C/C++. При изменении текущей строки привязанного набора записей все связанные поля в наборе записей копируются в переменные C/C++. При необходимости скопированные данные преобразуются в объявленный тип данных переменной C/C++.
Метод BindToRecordset интерфейса IADORecordBinding привязывает поля к переменным C/C++. Метод AddNew добавляет новую строку в привязанный набор записей. Метод Update заполняет поля в новых строках набора записей или обновляет поля в существующих строках значением переменных C/C++.
Интерфейс IADORecordBinding реализуется объектом Recordset . Вы не кодируйте реализацию самостоятельно.
Записи привязки
Расширения Visual C++ для ADO сопоставляют поля объекта Recordset с переменными C/C++. Определение сопоставления между полем и переменной называется записью привязки. Макросы предоставляют записи привязки для числовых данных, данных фиксированной и переменной длины. Записи привязки и переменные C/C++ объявляются в классе, производном от класса Расширений Visual C++, CADORecordBinding. Класс CADORecordBinding определяется внутренне макросами записи привязки.
ADO внутренне сопоставляет параметры в этих макросах со структурой OLE DBBINDING и создает объект accessor OLE DB для управления перемещением и преобразованием данных между полями и переменными. OLE DB определяет данные как состоящие из трех частей: буфер , в котором хранятся данные; состояние , указывающее, было ли поле успешно сохранено в буфере или как переменная должна быть восстановлена в поле; и длину данных. (Дополнительные сведения см . в справочнике по OLE DB Для программистов, глава 6. Получение и настройка данных.)
Файл заголовка
Добавьте следующий файл в приложение, чтобы использовать расширения Visual C++ для ADO:
#include <icrsint.h>
Привязка полей набора записей
Привязка полей набора записей к переменным C/C++
Создайте класс, производный от класса CADORecordBinding .
Укажите записи привязки и соответствующие переменные C/C++ в производном классе. Заключите в скобки записи привязки между BEGIN_ADO_BINDING и END_ADO_BINDING макросами. Не завершайте макросы запятыми или точками с запятой. Соответствующие разделители задаются автоматически каждым макросом. Укажите одну запись привязки для каждого поля, сопоставленного с переменной C/C++. Используйте соответствующий элемент из ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRY или ADO_VARIABLE_LENGTH_ENTRY семейства макросов.
В приложении создайте экземпляр класса, производного от 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, также являются типами фиксированной длины. Каждое семейство имеет разные наборы параметров, поэтому вы можете исключить сведения о привязке, которые не являются интересующими.
Дополнительные сведения см. в справочнике по OLE DB Для программистов, приложение A. Типы данных.
Начальные записи привязки
BEGIN_ADO_BINDING(Класс)
Данные фиксированной длины
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)
Данные переменной длины
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()
Параметр |
Описание |
---|---|
Class |
Класс, в котором определяются записи привязки и переменные C/C++. |
Ordinal |
Порядковое число, отсчитывающее от одного, поля Recordset , соответствующего переменной C/C++. |
DataType |
Эквивалентный тип данных ADO переменной C/C++ (список допустимых типов данных см. в разделе DataTypeEnum ). При необходимости значение поля Recordset будет преобразовано в этот тип данных. |
Буфера |
Имя переменной C/C++, в которой будет храниться поле Recordset . |
Размер |
Максимальный размер буфера в байтах. Если buffer будет содержать строку переменной длины, разрешите место для завершающего нуля. |
Состояние |
Имя переменной, указывающее, является ли содержимое буфера допустимым и было ли успешно преобразовано поле в DataType . Два наиболее важных значения для этой переменной — adFldOK, что означает, что преобразование прошло успешно. и adFldNull, что означает, что значение поля будет типом VARIANT VT_NULL, а не просто пустым. Возможные значения состояния перечислены в следующей таблице "Значения состояния". |
Modify |
Логический флаг; Значение TRUE указывает, что ADO может обновить соответствующее поле Recordset значением, содержащимся в буфере. Задайте для параметра Boolean modify значение TRUE, чтобы разрешить ADO обновлять связанное поле, и значение FALSE, если вы хотите проверить поле, но не изменить его. |
Точность |
Число цифр, которые могут быть представлены в числовой переменной. |
Scale |
Число десятичных разрядов в числовой переменной. |
Length |
Имя четырехбайтовой переменной, которая будет содержать фактическую длину данных в Buffer. |
Значения состояния
Значение переменной 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 |
При обновлении использовалось значение по умолчанию. |