共用方式為


Visual C++ 延伸模組

IADORecordBinding 介面

適用於 ADO 的 Microsoft Visual C++ 延伸模組會將 Recordset 物件的欄位關聯或繫結到 C/C++ 變數。 每當所繫結 Recordset 的目前資料列變更時,Recordset 中的所有繫結欄位都會複製到 C/C++ 變數。 如有必要,所複製的資料會轉換成 C/C++ 變數所宣告的資料類型。

IADORecordBinding 介面的 BindToRecordset 方法會將欄位繫結至 C/C++ 變數。 AddNew 方法會在繫結的 Recordset 中新增資料列。 Update 方法會在 Recordset 的新資料列中填入欄位,或使用 C/C++ 變數的值來更新現有資料列中的欄位。

IADORecordBinding 介面會由 Recordset 物件實作。 您不必自行撰寫實作程式碼。

繫結項目

適用於 ADO 的 Visual C++ 延伸模組會將 Recordset 物件的欄位對應到 C/C++ 變數。 欄位與變數之間的對應定義稱為繫結項目。 巨集可為數值資料、固定長度資料和可變長度資料提供繫結項目。 繫結項目和 C/C++ 變數會在由 Visual C++ 延伸模組類別 CADORecordBinding 衍生的某個類別中進行宣告。 CADORecordBinding 類別會由繫結項目巨集在內部進行定義。

ADO 會在內部將這些巨集中的參數對應到 OLE DB DBBINDING 結構,並建立 OLE DB Accessor 物件來管理欄位與變數之間的資料移動和轉換。 OLE DB 會將資料定義為包含三個部分:資料儲存所在的「緩衝區」;可指出欄位是否已成功儲存到緩衝區的「狀態」,或應該如何將變數還原到欄位;以及資料的「長度」。 (如需詳細資訊,請參閱《OLE DB 程式設計人員參考》中的取得和設定資料 (OLE DB))。

標頭檔案

請在應用程式中包含下列檔案,以使用適用於 ADO 的 Visual C++ 延伸模組:

#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++ 延伸模組範例

介面方法

IADORecordBinding 介面有三種方法:BindToRecordsetAddNewUpdate。 每個方法的唯一引數是衍生自 CADORecordBinding 的類別執行個體指標。 因此,AddNewUpdate 方法無法指定其 ADO 方法同名項的任何參數。

Syntax

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

固定長度資料

ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)

ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)

數值資料

ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modify)

ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modify)

可變長度資料

ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Size, Status, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)

ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, DataType, Buffer, Size, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Size, Modify)

結尾繫結項目

END_ADO_BINDING()

參數 Description
類別 繫結項目和 C/C++ 變數所定義的類別。
序數 對應至 C/C++ 變數的 Recordset 欄位序數 (從 1 起算)。
DataType C/C++ 變數的對等 ADO 資料類型 (請參閱 DataTypeEnum 以取得有效資料類型清單)。 如有必要,Recordset 欄位的值會轉換為此資料類型。
Buffer Recordset 欄位將儲存所在的 C/C++ 變數名稱。
大小 Buffer 的大小上限 (以位元組為單位)。 如果 Buffer 會包含可變長度字串,請保留足夠空間給結尾的零。
狀態 變數的名稱,會指出 Buffer 的內容是否有效,以及是否有成功將欄位轉換為 DataType

此變數的兩個最重要的值是 adFldOK (表示轉換成功) 和 adFldNull (表示欄位的值會是類型為 VT_Null 的 VARIANT,而非只是空的)。

Status 的可能值會列在下一個資料表「狀態值」中。
Modify 布林值旗標:若為 TRUE,表示 ADO 可以使用 Buffer 中包含的值來更新對應的 Recordset 欄位。

將布林值 modify 參數設定為 TRUE,可讓 ADO 更新所繫結欄位,如果您想要檢查欄位但不要進行變更,則請將其設定為 FALSE。
有效位數 可在數值變數中呈現的位數。
調整 數值變數中的小數位數。
長度 四位元組變數的名稱,會包含 Buffer 中資料的實際長度。

狀態值

Status 變數的值會指出欄位是否已成功複製到變數。

在設定資料時,可將 Status 設定為 adFldNull,以指出 Recordset 欄位應該設定為 null。

常數 描述
adFldOK 0 傳回了非 null 欄位值。
adFldBadAccessor 1 繫結無效。
adFldCantConvertValue 2 由於符號不符合或資料溢位以外的原因,而無法轉換值。
adFldNull 3 在取得欄位時,指出傳回了 null 值。

在設定欄位時,指出應該在欄位本身無法編碼 NULL 時 (例如字元陣列或整數),將欄位設定為 NULL
adFldTruncated 4 可變長度資料或數字遭到截斷。
adFldSignMismatch 5 值帶正負號,變數資料類型不帶正負號。
adFldDataOverFlow 6 值大於可以儲存在變數資料類型中的大小。
adFldCantCreate 7 已開啟未知的資料行類型和欄位。
adFldUnavailable 8 無法判斷欄位值,例如,在沒有預設值的全新未指派欄位上時。
adFldPermissionDenied 9 在更新時,沒有寫入資料的權限。
adFldIntegrityViolation 10 在更新時,欄位值會違反資料行完整性。
adFldSchemaViolation 11 在更新時,欄位值會違反資料行結構描述。
adFldBadStatus 12 在更新時,狀態參數無效。
adFldDefault 13 在更新時,使用了預設值。

另請參閱

Visual C++ 延伸模組範例Visual C++ 延伸模組標頭