定義綁定條目
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_ENTRY、ADO_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)值。 |