Visual C++ 延伸模組

IADORecordBinding 介面

Microsoft Visual C++ Extensions for ADO 將 Recordset 物件的欄位關聯或繫結到 C/C++ 變數。 每當系結 Recordset 的目前數據列 變更時,Recordset 中的所有系結字段都會複製到 C/C++ 變數。 如有必要,複製的數據會轉換成 C/C++ 變數的宣告數據類型。

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

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 程式設計人員參考中的 取得和設定數據 (OLE DB)。

標頭檔案

在應用程式中包含下列檔案,以使用適用於 ADO 的 Visual C++ Extensions:

#include <icrsint.h>

系結記錄集欄位

將記錄集欄位系結至 C/C++ 變數

  1. 建立衍生自 CADORecordBinding 類別的類別。

  2. 在衍生類別中指定系結項目和對應的 C/C++ 變數。 請將位於 BEGIN_ADO_BINDING 和 END_ADO_BINDING 巨集之間的系結項目加上括號。 請勿以逗號或分號終止巨集。 每個巨集會自動設定適當的分隔符號。

    請為要對應至 C/C++ 變數的每個欄位指定一個繫結項目。 在宏 ADO_FIXED_LENGTH_ENTRY、ADO_NUMERIC_ENTRY或 ADO_VARIABLE_LENGTH_ENTRY 系列中選擇適當的成員。

  3. 在您的應用程式中,建立衍生自 CADORecordBinding類別的實例。 從 Recordset取得 IADORecordBinding 介面。 然後呼叫 bindToRecordset 方法 方法,將 Recordset 字段系結至 C/C++ 變數。

如需詳細資訊,請參閱 Visual C++ Extensions 範例。

介面方法

IADORecordBinding 介面有三種方法:BindToRecordset、AddNew和 Update。 每個方法唯一的參數是指向從 CADORecordBinding派生而來的類別實例的指標。 因此,AddNew 和 Update 方法無法指定其 ADO 方法名稱的任何參數。

語法

BindToRecordset 方法會將 Recordset 字段與 C/C++ 變數產生關聯。

BindToRecordset(CADORecordBinding *binding)

AddNew 方法會叫用其同名的 ADO AddNew 方法,將新的資料列新增至 Recordset。

AddNew(CADORecordBinding *binding)

Update 方法會呼叫同名的 ADO Update 方法,以更新 Recordset。

Update(CADORecordBinding *binding)

輸入綁定巨集

繫結條目巨集定義了 資料集 欄位與變數之間的關聯。 開頭和結尾巨集會分隔綁定項集。

提供的巨集系列可用於處理固定長度的資料,如 adDate 或 adBoolean;數值資料,如 adTinyInt、adInteger或 adDouble;以及可變長度的資料,如 adChar、adVarChar 或 adVarBinary。 除了 adVarNumeric之外,所有數值類型也是固定長度的類型。 每個系列都有不同的參數集合,因此您可以排除不感興趣的系結資訊。

如需詳細資訊,請參閱 OLE DB 程式設計人員參考的 附錄 A:數據類型。

開始系結條目

BEGIN_ADO_BINDING(類別)

Fixed-Length 數據

ADO_FIXED_LENGTH_ENTRY(序數、資料類型、緩衝區、狀態、修改)

ADO_FIXED_LENGTH_ENTRY2(序數、數據類型、緩衝區、修改)

數值數據

ADO_NUMERIC_ENTRY(序數、資料類型、緩衝區、精度、刻度、狀態、修改)

ADO_NUMERIC_ENTRY2(序數、數據類型、緩衝區、精度、規模、修改)

Variable-Length 數據

ADO_VARIABLE_LENGTH_ENTRY(序號、資料類型、緩衝區、大小、狀態、長度、修改)

ADO_VARIABLE_LENGTH_ENTRY2(序數、DataType、Buffer、Size、Status、Modify)

ADO_VARIABLE_LENGTH_ENTRY3(序數、資料類型、緩衝區、大小、長度、修改)

ADO_VARIABLE_LENGTH_ENTRY4(序數、DataType、Buffer、Size、Modify)

結束系結項目

END_ADO_BINDING()

參數 描述
類別 定義連結項和 C/C++ 變數的類別。
序數 序數,從1開始,對應於您的 C/C++ 變數的 記錄集中的 欄位。
DataType C/C++ 變數的對等 ADO 資料類型(如需有效數據類型的清單,請參閱 DataTypeEnum)。 視需要,Recordset 欄位的值將會轉換成此數據類型。
緩衝區 將 Recordset 欄位儲存於其中的 C/C++ 變數名稱。
大小 Buffer位元組的大小上限。 如果 緩衝區 將包含可變長度字元串,則應預留終止空字元的空間。
狀態 變數的名稱,指出 Buffer 的內容是否有效,以及欄位轉換成 DataType 是否成功。

此變數的兩個最重要的值是 adFldOK,這表示轉換成功;和 adFldNull,這表示字段的值會是類型為 VT_NULL 的 VARIANT,而不只是空白。

Status 的可能值列在下一個表格「狀態值」中。
修改 布林旗標;若為 TRUE 則表示允許 ADO 使用 Buffer中的值更新相應的 Recordset 欄位。

將布爾值 將 參數修改為 TRUE,讓 ADO 更新系結欄位,如果想要檢查欄位但不要變更,則為 FALSE。
精確度 可以在數值變數中表示的數字數目。
調整 數值變數中的小數位數。
長度 四位元組變數的名稱,其中包含 Buffer中數據的實際長度。

狀態值

Status 變數的值表示字段是否成功複製到變數。

設定數據時,狀態 可能會設定為 adFldNull,以表示應將 記錄集 的欄位設為 null。

恒定的 價值 描述
adFldOK 0 傳回非空欄位值。
adFldBadAccessor 1 系結無效。
adFldCantConvertValue 2 由於符號不符或數據溢位以外的原因,無法轉換值。
adFldNull 3 取得欄位時,表示傳回 null 值。

設定欄位時,表示欄位應該設定為 NULL 欄位時,欄位無法編碼 NULL 本身(例如字元陣列或整數)。
廣告欄位截斷 4 可變長度的數據或數值數位已截斷。
adFldSignMismatch 5 值為帶正負號,且變數數據類型為不帶正負號。
adFldDataOverFlow 6 值大於可以儲存在該變數的資料類型中的最大值。
adFldCantCreate 7 未知的數據行類型和欄位已經開啟。
adFldUnavailable 8 無法確定欄位值,例如,在一個沒有預設值且尚未指派的新欄位上。
adFldPermissionDenied 9 更新時,沒有寫入數據的許可權。
欄位完整性違規 10 更新時,域值會違反數據行完整性。
adFldSchemaViolation 11 更新時,域值會違反數據行架構。
adFldBadStatus 12 更新時,狀態參數無效。
adFldDefault 13 更新時,會使用預設值。

另請參閱

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