使用 Visual C++ 扩展

适用于: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++ 变量

  1. 创建一个派生自 CADORecordBinding 类的类。

  2. 在派生类中指定绑定项和相应的 C/C++ 变量。 将 BEGIN_ADO_BINDINGEND_ADO_BINDING 宏之间的绑定项用括号括起。 宏不要以逗号或冒号结束。 每个宏会自动指定适当的分隔符。 为要映射到 C/C++ 变量的每个字段指定一个绑定项。 请使用 ADO_FIXED_LENGTH_ENTRYADO_NUMERIC_ENTRYADO_VARIABLE_LENGTH_ENTRY 系列宏的适当成员。

  3. 在应用程序中,创建一个派生自 CADORecordBinding 类的类实例。 从 Recordset 获取 IADORecordBinding 接口。 然后调用 BindToRecordset 方法将 Recordset 字段绑定到 C/C++ 变量。

有关详细信息,请参阅 Visual C++ Extensions 示例

接口方法

IADORecordBinding 接口具有以下三个方法:BindToRecordsetAddNewUpdate。 每个方法的唯一参数是一个指向派生自 CADORecordBinding 的类的实例的指针。 因此,AddNewUpdate 方法不能指定与其同名的 ADO 方法的任何参数。

语法

BindToRecordset 方法将 Recordset 字段与 C/C++ 变量关联。

BindToRecordset(CADORecordBinding *binding)

AddNew 方法调用与其同名的 ADO AddNew 方法,以在 Recordset 中添加新行。

AddNew(CADORecordBinding *binding)

Update 方法调用与其同名的 ADO Update 方法,以更新 Recordset

Update(CADORecordBinding *binding)

绑定项宏

绑定项宏用于定义 Recordset 字段与变量的关联。 各绑定项之间用开始宏和结束宏分隔。

对于定长数据(如 adDateadBoolean )、数值数据(如 adTinyIntadIntegeradDouble )和可变长度数据(如 adCharadVarCharadVarBinary ),均提供了宏系列。 除 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

更新时,使用默认值。