定义绑定条目
ADO VC++ Extensions 可将 Recordset 对象的字段映射到 C/C++ 变量,对字段与变量之间映射关系的定义称为“绑定条目”。预处理宏用来定义数值、定长和变长变量的绑定条目。
将 BEGIN_ADO_BINDING 和 END_ADO_BINDING 宏之间的绑定条目用括号括起。不要在绑定条目结尾使用逗号或分号,这些定界符仅限在宏中使用。
为每个将被转换为 C/C++ 变量的字段指定一个绑定条目。使用适当的 ADO_FIXED_LENGTH_BINDING_ENTRY、ADO_NUMERIC_BINDING_ENTRY 或 ADO_VARIABLE_LENGTH_BINDING_ENTRY 宏。
在宏的参数中,用序数指定将被提出的 Recordset 字段 — 0 标识第一字段,1 标识第二字段,依此类推。
使用数据类型声明 C/C++ 变量。如果变量为数值,也可指定精度和范围。如果变量为变长变量(如字符串),则必须以字节指定变量的最大尺寸。如果需要,Recordset 字段值可被强制为该数据类型。
指定临时的工作缓冲区,用来将字段值从 VARIANT 转换为 C/C++ 变量。缓冲区应至少与此 C/C++ 变量一样大。
将布尔型修改参数设置为 TRUE 使 ADO 可更新绑定的字段,如只检查字段而不将其更改,可设置为 FALSE。VC++ Extensions 不保留有关字段的状态信息,因此必须指定 ADO 是否更改字段值(例如,由数据源保留的自动增值字段的值)。因此该字段的修改参数应设置为 FALSE。
状态参数可告诉您从 Recordset 字段到 C 或 C++ 变量的转换是否成功以及变量的内容是否有效。该参数的两个最重要的值是 adFldOK (意味着转换成功)和 adFldNull (意味着字段是 NULL—无值可供转换)。
首先检测该参数以决定 C 或 C++ 变量是否有效。例如,如果字段具有有效的行内容,状态将会是 adFldOK;如果移动到另一个字段为 NULL 的行,状态则将是 adFldNull。然而,C 或 C++ 变量的内容将不被更改 — 该变量将仍然包含上一行的字段值。
将 Recordset 绑定到变量
在应用程序中,调用 BindToRecordset 接口方法可使 Recordset 字段关联(或绑定)到 C/C++ 变量,无论何时更改 Recordset 对象的当前行,C/C++ 变量都将自动更新。
头文件
要使用 VC++ Extensions,请在应用程序中包含如下文件:
? | #include <icrsint.h> |
接口方法
IADORecordBinding 接口具有使 Recordset 字段与 C/C++ 变量关联、添加新行和执行更新的方法。所有这三个方法都可使指针指向由 CADORecordBinding 派生的类,该 CADORecordBinding 定义每个字段和变量之间的绑定。
接口方法是:
? | BindToRecordset(&binding) |
调用该方法可使变量与字段相关联。
? | AddNew(&binding) |
调用该方法可间接调用 ADO AddNew 方法。
? | Update(&binding) |
调用该方法可间接调用 ADO Update 方法。
预处理宏
? | BEGIN_ADO_BINDING(cls) |
? | ADO_FIXED_LENGTH_BINDING_ENTRY(Ordinal, DataType, Buffer, Status, Modify) |
? | ADO_NUMERIC_BINDING_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, |
Status, Modify)
? | ADO_VARIABLE_LENGTH_BINDING_ENTRY(Ordinal, DataType, Buffer, Size, |
Status, Modify)
? | END_ADO_BINDING() |
参数 |
说明 |
cls |
类,定义绑定条目,缓冲区,和 Recordset 对象。 |
Ordinal |
按顺序的字段号码,0 标识第一字段,1 标识第二字段,依此类推。 |
DataType |
储存已转换字段的变量的数据类型。 |
Buffer |
缓冲区,用于将字段转换为变量。 |
Status |
指示字段转换是否成功。 |
Modify |
布尔标志;如果为 TRUE,则表明 ADO 可以更新关联的字段。 |
Precision |
在数值变量中可被表现出的数字位数。 |
Scale |
位于数值变量中的小数点后的位数。 |
Size |
变长变量所需的字节数,诸如:字符串。 |
状态参数值 |
说明 |
adFldOK |
返回非 NULL 字段值。 |
adFldBadAccessor |
绑定无效。 |
adFldCantConvertValue |
由于符号不匹配和数据溢出以外的原因,值不能转换。 |
adFldNull |
返回 NULL。 |
adFldTruncated |
变长数据或数值型数字被截短。 |
adFldSignMismatch |
值有符号,而变量数据类型无符号。 |
adFldDataOverFlow |
值大于在变量数据类型中的存储大小。 |
adFldCantCreate |
已打开未知列类型和字段。 |
adFldUnavailable |
无法确定字段值 — 例如在无默认值的新建、未指定的字段中。 |
adFldPermissionDenied |
更新时,不允许写入数据。 |
adFldIntegrityViolation |
更新时,字段值将破坏列的完整性。 |
adFldSchemaViolation |
更新时,字段值将破坏列模式。 |
adFldBadStatus |
更新时,无效的状态参数。 |
adFldDefault |
更新时,使用了默认值。 |