此頁(yè)沒(méi)有內(nèi)容條目
內(nèi)容

使用 ADO VC++ Extensions

定義綁定條目

ADO VC++ Extensions 可將 Recordset 對(duì)象的字段映射到 C/C++ 變量,對(duì)字段與變量之間映射關(guān)系的定義稱為“綁定條目”。預(yù)處理宏用來(lái)定義數(shù)值、定長(zhǎng)和變長(zhǎng)變量的綁定條目。

BEGIN_ADO_BINDING END_ADO_BINDING 宏之間的綁定條目用括號(hào)括起。不要在綁定條目結(jié)尾使用逗號(hào)或分號(hào),這些定界符僅限在宏中使用。

為每個(gè)將被轉(zhuǎn)換為 C/C++ 變量的字段指定一個(gè)綁定條目。使用適當(dāng)?shù)?ADO_FIXED_LENGTH_BINDING_ENTRYADO_NUMERIC_BINDING_ENTRY ADO_VARIABLE_LENGTH_BINDING_ENTRY 宏。

在宏的參數(shù)中,用序數(shù)指定將被提出的 Recordset 字段 — 0 標(biāo)識(shí)第一字段,1 標(biāo)識(shí)第二字段,依此類(lèi)推。

使用數(shù)據(jù)類(lèi)型聲明 C/C++ 變量。如果變量為數(shù)值,也可指定精度和范圍。如果變量為變長(zhǎng)變量(如字符串),則必須以字節(jié)指定變量的最大尺寸。如果需要,Recordset 字段值可被強(qiáng)制為該數(shù)據(jù)類(lèi)型。

指定臨時(shí)的工作緩沖區(qū),用來(lái)將字段值從 VARIANT 轉(zhuǎn)換為 C/C++ 變量。緩沖區(qū)應(yīng)至少與此 C/C++ 變量一樣大。

將布爾型修改參數(shù)設(shè)置為 TRUE 使 ADO 可更新綁定的字段,如只檢查字段而不將其更改,可設(shè)置為 FALSE。VC++ Extensions 不保留有關(guān)字段的狀態(tài)信息,因此必須指定 ADO 是否更改字段值(例如,由數(shù)據(jù)源保留的自動(dòng)增值字段的值)。因此該字段的修改參數(shù)應(yīng)設(shè)置為 FALSE。

狀態(tài)參數(shù)可告訴您從 Recordset 字段到 C 或 C++ 變量的轉(zhuǎn)換是否成功以及變量的內(nèi)容是否有效。該參數(shù)的兩個(gè)最重要的值是 adFldOK (意味著轉(zhuǎn)換成功)和 adFldNull (意味著字段是 NULL—無(wú)值可供轉(zhuǎn)換)。

首先檢測(cè)該參數(shù)以決定 C 或 C++ 變量是否有效。例如,如果字段具有有效的行內(nèi)容,狀態(tài)將會(huì)是 adFldOK;如果移動(dòng)到另一個(gè)字段為 NULL 的行,狀態(tài)則將是 adFldNull。然而,C 或 C++ 變量的內(nèi)容將不被更改 — 該變量將仍然包含上一行的字段值。

將 Recordset 綁定到變量

在應(yīng)用程序中,調(diào)用 BindToRecordset 接口方法可使 Recordset 字段關(guān)聯(lián)(或綁定)到 C/C++ 變量,無(wú)論何時(shí)更改 Recordset 對(duì)象的當(dāng)前行,C/C++ 變量都將自動(dòng)更新。

頭文件

要使用 VC++ Extensions,請(qǐng)?jiān)趹?yīng)用程序中包含如下文件:

?#include <icrsint.h>

接口方法

IADORecordBinding 接口具有使 Recordset 字段與 C/C++ 變量關(guān)聯(lián)、添加新行和執(zhí)行更新的方法。所有這三個(gè)方法都可使指針指向由 CADORecordBinding 派生的類(lèi),該 CADORecordBinding 定義每個(gè)字段和變量之間的綁定。

接口方法是:

?BindToRecordset(&binding)

調(diào)用該方法可使變量與字段相關(guān)聯(lián)。

?AddNew(&binding)

調(diào)用該方法可間接調(diào)用 ADO AddNew 方法。

?Update(&binding)

調(diào)用該方法可間接調(diào)用 ADO Update 方法。

預(yù)處理宏

?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()

參數(shù)

說(shuō)明

cls

類(lèi),定義綁定條目,緩沖區(qū),和 Recordset 對(duì)象。

Ordinal

按順序的字段號(hào)碼,0 標(biāo)識(shí)第一字段,1 標(biāo)識(shí)第二字段,依此類(lèi)推。

DataType

儲(chǔ)存已轉(zhuǎn)換字段的變量的數(shù)據(jù)類(lèi)型。

Buffer

緩沖區(qū),用于將字段轉(zhuǎn)換為變量。

Status

指示字段轉(zhuǎn)換是否成功。

Modify

布爾標(biāo)志;如果為 TRUE,則表明 ADO 可以更新關(guān)聯(lián)的字段。

Precision

在數(shù)值變量中可被表現(xiàn)出的數(shù)字位數(shù)。

Scale

位于數(shù)值變量中的小數(shù)點(diǎn)后的位數(shù)。

Size

變長(zhǎng)變量所需的字節(jié)數(shù),諸如:字符串。

 

狀態(tài)參數(shù)值

說(shuō)明

adFldOK

返回非 NULL 字段值。

adFldBadAccessor

綁定無(wú)效。

adFldCantConvertValue

由于符號(hào)不匹配和數(shù)據(jù)溢出以外的原因,值不能轉(zhuǎn)換。

adFldNull

返回 NULL。

adFldTruncated

變長(zhǎng)數(shù)據(jù)或數(shù)值型數(shù)字被截短。

adFldSignMismatch

值有符號(hào),而變量數(shù)據(jù)類(lèi)型無(wú)符號(hào)。

adFldDataOverFlow

值大于在變量數(shù)據(jù)類(lèi)型中的存儲(chǔ)大小。

adFldCantCreate

已打開(kāi)未知列類(lèi)型和字段。

adFldUnavailable

無(wú)法確定字段值 — 例如在無(wú)默認(rèn)值的新建、未指定的字段中。

adFldPermissionDenied

更新時(shí),不允許寫(xiě)入數(shù)據(jù)。

adFldIntegrityViolation

更新時(shí),字段值將破壞列的完整性。

adFldSchemaViolation

更新時(shí),字段值將破壞列模式。

adFldBadStatus

更新時(shí),無(wú)效的狀態(tài)參數(shù)。

adFldDefault

更新時(shí),使用了默認(rèn)值。