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++ 變數
建立衍生自 CADORecordBinding 類別的類別。
在衍生類別中指定系結項目和對應的 C/C++ 變數。 請將位於 BEGIN_ADO_BINDING 和 END_ADO_BINDING 巨集之間的系結項目加上括號。 請勿以逗號或分號終止巨集。 每個巨集會自動設定適當的分隔符號。
請為要對應至 C/C++ 變數的每個欄位指定一個繫結項目。 在宏 ADO_FIXED_LENGTH_ENTRY、ADO_NUMERIC_ENTRY或 ADO_VARIABLE_LENGTH_ENTRY 系列中選擇適當的成員。
在您的應用程式中,建立衍生自 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 | 更新時,沒有寫入數據的許可權。 |
adFldIntegrityViolation | 10 | 更新時,域值會違反數據行完整性。 |
adFldSchemaViolation | 11 | 更新時,域值會違反數據行架構。 |
adFldBadStatus | 12 | 更新時,狀態參數無效。 |
adFldDefault | 13 | 更新時,會使用預設值。 |