Microsoft Visual C++ Extensions for ADO では、Recordset オブジェクトのフィールドを C/C++ 変数に割り当て (またはバインドし) ます。バインドされた Recordset の現在の行が変更されると、Recordset 内のバインドされたすべてのフィールドが C/C++ 変数にコピーされます。必要に応じて、コピーされたデータは C/C++ 変数の宣言データ型に変換されます。
IADORecordBinding インターフェイスの BindToRecordset メソッドは、フィールドを C/C++ 変数にバインドします。AddNew メソッドは、バインドされた Recordset に新規行を追加します。Update メソッドは、C/C++ 変数の値で Recordset の新規行のフィールドに値を入力したり、既存の行のフィールドの値を更新します。
IADORecordBinding インターフェイスは Recordset オブジェクトによって実装されます。この実装はユーザーが行う必要はありません。
Microsoft Visual C++ Extensions for ADO は Recordset オブジェクトのフィールドを C/C++ 変数にマップします。フィールドと変数のマップの定義を、"バインディング エントリ" と呼びます。マクロでは数値、固定長、および可変長データ用にバインディング エントリを用意しています。バインディング エントリと C/C++ 変数は、Visual C++ Extensions クラス CADORecordBinding から派生したクラスで宣言します。CADORecordBinding クラスは、バインディング エントリ マクロで内部的に定義します。
ADO では、これらのマクロのパラメータを OLE DB DBBINDING 構造体に内部的にマップし、OLE DB Accessor オブジェクトを作成して、フィールドまたは変数間のデータの移動と変換を管理します。OLE DB は 3 つの要素でデータを定義します。3 つの要素とは、データを保存する Buffer、バッファにフィールドが正しく保存されたかどうか、または変数をフィールドに復元する方法を示す Status、およびデータの Length です。(詳細については、「OLE DB Programmer's Reference」の「Chapter 6: Getting and Setting Data」を参照してください。
Visual C++ Extensions for ADO を使うには、アプリケーションに次のファイルを含めてください。
#include <icrsint.h>
Recordset フィールドを C/C++ 変数にバインドするには
各フィールドにバインディング エントリを 1 つ指定して、C/C++ 変数にマップします。ADO_FIXED_LENGTH_ENTRY、ADO_NUMERIC_ENTRY、または ADO_VARIABLE_LENGTH_ENTRY マクロ ファミリからメンバを選択して使います。
詳細については、「Visual C++ Extensions での ADO の例」を参照してください。
IADORecordBinding インターフェイスには、3 つのメソッド、BindToRecordset、AddNew、および Update があります。CADORecordBinding から派生したクラスのインスタンスへのポインタが、これらメソッドの唯一の引数です。そのため、AddNew メソッドおよび Update メソッドでは、ADO メソッド等価のパラメータは指定できません。
構文
BindToRecordset メソッドは、Record フィールドを 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 Programmer's Reference」の「Appendix A: Data Types」を参照してください。
バインディング エントリの先頭
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()
パラメータ | 説明 |
Class | バインディング エントリおよび C/C++ 変数が定義されるクラス。 |
Ordinal | C/C++ 変数に対応する Recordset フィールドのインデックス。1 から始まります。 |
Data Type | C/C++ 変数の等価 ADO (有効なデータ型については、「DataTypeEnum」参照)。Recordset フィールドの値は、必要に応じてこのデータ型に変更されます。 |
Buffer | Recordset フィールドを格納する C/C++ 変数の名前。 |
Size | バイト数で示す Buffer の最大サイズ。Buffer に可変長文字列を格納する場合、末尾のゼロにスペースが用意されます。 |
Status | Buffer の内容が有効かどうか、および DataType のフィールドの変換が成功したかどうかを示す変数の名前。 この変数で最も重要な 2 つの値は、変換の成功を示す adFldOK と、フィールドが Null であり、単に空ではないことを示す adFldNull です。 Status に指定される値については、次の表の「Status 値」を参照してください。 |
Modify | ブール フラグ。TRUE の場合、対応する Recordset フィールドを Buffer の値で更新できることを示します。 バインドされたフィールドを更新できるようにするには、ブール型 (Boolean) の modify パラメータを TRUE に設定します。確認だけでフィールドを変更しない場合は FALSE に設定します。 |
Precision | 数値変数で表すことのできる桁数。 |
Scale | 数値変数での小数点以下の桁数。 |
Length | Buffer 内のデータの実際の長さを格納する 4 バイト変数の名前。 |
Status 変数の値は、フィールドが変数に正常にコピーされたかどうかを示します。
データを設定するとき、Recordset フィールドを Null に設定することを示すために、Status を adFldNull に設定します。
定数 | 値 | 説明 |
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 | 更新時に、既定値が使われました。 |