适用于:Access 2013、Office 2013
IADORecordBinding 接口
Microsoft Visual C++ Extensions for ADO 将 Recordset 对象的字段关联或绑定到 C/C++ 变量。 只要绑定的 Recordset 的当前行发生更改,则 Recordset 中的所有绑定字段都将复制到 C/C++ 变量。 如有必要,复制的数据将转换为 C/C++ 变量的已声明数据类型。
IADORecordBinding 接口的 BindToRecordset 方法将字段绑定到 C/C++ 变量。 AddNew 方法在绑定的 Recordset 中添加新的行。 Update 方法用 C/C++ 变量的值填充 Recordset 新行中的字段或更新现有行中的字段。
IADORecordBinding 接口由 Recordset 对象实现。 您无需自己编写实现代码。
绑定项
Visual C++ Extensions for ADO 将 Recordset 对象的字段映射到 C/C++ 变量。 字段与变量之间的映射的定义称为绑定项。 宏为数值数据、定长数据和可变长度数据提供了绑定项。 绑定项和 C/C++ 变量在派生自 Visual C++ Extensions 类 CADORecordBinding 的类中声明。 CADORecordBinding 类由绑定项宏在内部定义。
ADO 将这些宏中的参数内部映射到 OLE DB DBBINDING 结构,并创建 OLE DB 访问器 对象来管理字段和变量之间的数据移动和转换。 OLE DB 将数据定义为由三部分组成:存储数据的 缓冲区 ;一个 状态 ,指示字段是否已成功存储在缓冲区中,或应如何将变量还原到该字段;和数据的 长度 。 (有关详细信息,请参阅 OLE DB 程序员参考第 6 章:获取和设置数据。)
头文件
若要使用 Visual C++ Extensions for ADO,请在应用程序中包括以下文件:
#include <icrsint.h>
绑定 Recordset 字段
将 Recordset 字段绑定到 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 类的类实例。 从 Recordset 获取 IADORecordBinding 接口。 然后调用 BindToRecordset 方法将 Recordset 字段绑定到 C/C++ 变量。
有关详细信息,请参阅 Visual C++ Extensions 示例。
接口方法
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 之外的所有数值类型也是定长类型。 每个系列具有不同的参数集,以便您可以排除不感兴趣的绑定信息。
有关详细信息,请参阅《OLE DB 程序员参考》中的“附录 A:数据类型”。
开始绑定项
BEGIN_ADO_BINDING (类)
定长数据
ADO_FIXED_LENGTH_ENTRY (序号、数据类型、缓冲区、状态、修改)
ADO_FIXED_LENGTH_ENTRY2 (Ordinal、DataType、Buffer、Modify)
数值数据
ADO_NUMERIC_ENTRY (序号、数据类型、缓冲区、精度、小数位数、状态、修改)
ADO_NUMERIC_ENTRY2 (序号、数据类型、缓冲区、精度、小数位数、修改)
可变长度数据
ADO_VARIABLE_LENGTH_ENTRY (序号、数据类型、缓冲区、大小、状态、长度、修改)
ADO_VARIABLE_LENGTH_ENTRY2 (序号、数据类型、缓冲区、大小、状态、修改)
ADO_VARIABLE_LENGTH_ENTRY3 (序号、数据类型、缓冲区、大小、长度、修改)
ADO_VARIABLE_LENGTH_ENTRY4 (序号、数据类型、缓冲区、大小、修改)
结束绑定项
END_ADO_BINDING ()
参数 |
说明 |
---|---|
类 |
在其中定义绑定项和 C/C++ 变量的类。 |
Ordinal |
与 C/C++ 变量对应的 Recordset 字段的序号,从 1 开始计数。 |
DataType |
C/C++ 变量的等效 ADO 数据类型(有关有效数据类型的列表,请参阅 DataTypeEnum)。 如有必要,Recordset 字段的值将转换为此数据类型。 |
Buffer |
存储 Recordset 字段的 C/C++ 变量的名称。 |
Size |
Buffer 的最大大小,以字节计。 如果 Buffer 包含可变长度字符串,则还为终止字符零留出了空间。 |
状态 |
变量名称,用于指示 Buffer 的内容是否有效,以及字段是否成功转换为 DataType。 此变量有两个最重要的值:一个是 adFldOK,表示转换成功;另一个是 adFldNull,表示字段的值为 VT_NULL 类型的 VARIANT,但不仅仅为空。 下面的“状态值”表中列出了 Status 的可能值。 |
Modify |
布尔型标志。如果为 TRUE,则指示允许 ADO 用 Buffer 中所包含的值更新相应的 Recordset 字段。 如果要让 ADO 更新绑定字段,则将布尔型 Modify 参数设置为 TRUE。如果要检查字段但不进行更改,则设置为 FALSE。 |
精度 |
可以用数值变量表示的数字位数。 |
小数位数 |
用数值变量表示的小数位数。 |
长度 |
4 字节变量的名称,包含 Buffer 中数据的实际长度。 |
状态值
Status 变量的值用于指示字段是否成功复制到变量。
在设置数据时,Status 可以设置为 adFldNull,以指示 Recordset 字段应设置为 Null。
常量 |
值 |
说明 |
---|---|---|
adFldOK |
0 |
返回非 Null 字段值。 |
adFldBadAccessor |
1 |
绑定无效。 |
adFldCantConvertValue |
2 |
由于符号不匹配或数据溢出之外的原因,值无法转换。 |
adFldNull |
3 |
在获取字段时,指示返回空值。 在设置字段时,指示当字段自身无法编码 NULL(如一个字符数组或整数)时字段应设置为 NULL。 |
adFldTruncated |
4 |
截断可变长度数据或数字。 |
adFldSignMismatch |
5 |
值有符号,变量数据类型无符号。 |
adFldDataOverFlow |
6 |
值大于变量数据类型中可存储的大小。 |
adFldCantCreate |
7 |
打开了未知的列类型和字段。 |
adFldUnavailable |
8 |
无法确定字段值 - 例如,在一个无默认值的新的未赋值字段上。 |
adFldPermissionDenied |
9 |
更新时,无权写数据。 |
adFldIntegrityViolation |
10 |
更新时,字段值与列完整性冲突。 |
adFldSchemaViolation |
11 |
更新时,字段值与列架构冲突。 |
adFldBadStatus |
12 |
更新时,状态参数无效。 |
adFldDefault |
13 |
更新时,使用默认值。 |