Расширения 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++
Создайте класс, производный от класса 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, также являются типами фиксированной длины. Каждое семейство имеет разные наборы параметров, чтобы можно было исключить сведения о привязке, которые не представляют интереса.
Дополнительные сведения см. в приложении 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++