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++ 變數
建立由 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++ 延伸模組範例。
介面方法
IADORecordBinding 介面有三種方法:BindToRecordset、AddNew 和 Update。 每個方法的唯一引數是衍生自 CADORecordBinding 的類別執行個體指標。 因此,AddNew 和 Update 方法無法指定其 ADO 方法同名項的任何參數。
Syntax
BindToRecordset 方法會將 Recordset 欄位與 C/C++ 變數建立關聯。
BindToRecordset(CADORecordBinding *binding)
AddNew 方法會叫用其同名項 (即 ADO AddNew 方法),以在 Recordset 中新增資料列。
AddNew(CADORecordBinding *binding)
Update 方法會叫用其同名項 (即 ADO Update 方法) 以更新 Recordset。
Update(CADORecordBinding *binding)
繫結項目巨集
繫結項目巨集會定義 Recordset 欄位與變數的關聯。 開頭和結尾巨集會分隔一組繫結項目。
固定長度資料 (例如 adDate 或 adBoolean)、數值資料 (例如 adTinyInt、adInteger 或 adDouble) 和可變長度資料 (例如 adChar、adVarChar 或 adVarBinary) 有提供巨集系列。 除了 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 | 在更新時,使用了預設值。 |