Visual C++ Extensions
IADORecordBinding インターフェイス
ADO 用の Microsoft Visual C++ Extensions は、Recordset オブジェクトのフィールドを C または C++ の変数に関連付けます (バインドします)。 バインドされた Recordset の現在の行が変更されるたびに、Recordset 内のバインドされたすべてのフィールドが C または C++ 変数にコピーされます。 コピーされるデータは、必要に応じて、C または C++ 変数の宣言データ型に変換されます。
IADORecordBinding インターフェイスの BindToRecordset メソッドは、フィールドを C または C++ の変数にバインドします。 AddNew メソッドは、バインドされた Recordset に新しい行を追加します。 Update メソッドは、C または C++ の変数の値を使用して、Recordset の新しい行のフィールドを設定するか、既存の行のフィールドを更新します。
IADORecordBinding インターフェイスは、Recordset オブジェクトによって実装されます。 自分で実装をコーディングする必要はありません。
バインド エントリ
ADO 用の Microsoft Visual C++ Extensions は、Recordset オブジェクトのフィールドを C または C++ の変数にマップします。 フィールドと変数の間のマッピングの定義は "バインド エントリ" と呼ばれます。 マクロは、数値、固定長、可変長データのバインド エントリを提供します。 バインド エントリと C または C++ の変数は、Visual C++ Extensions クラス CADORecordBinding から派生したクラスで宣言されます。 CADORecordBinding クラスは、バインド エントリ マクロによって内部で定義されます。
ADO は、これらのマクロのパラメーターを OLE DB DBBINDING 構造体に内部でマップし、OLE DB Accessor オブジェクトを作成して、フィールドと変数の間のデータの移動と変換を管理します。 OLE DB では、データを、データが格納される "バッファー"、フィールドがバッファーに正常に格納されたかどうか、または変数をフィールドにどのように復元するかを示す "状態"、データの "長さ" という 3 つの部分で構成されるものとして定義します (詳細については、OLE DB プログラマ リファレンスの「データの取得と設定 (OLE DB)」を参照してください)。
ヘッダー ファイル
ADO 用の Microsoft Visual C++ Extensions を使用するには、アプリケーションに次のファイルを含めます。
#include <icrsint.h>
Recordset フィールドのバインド
Recordset フィールドを C または C++ の変数にバインドする
CADORecordBinding クラスから派生したクラスを作成します。
派生クラスで、バインド エントリと対応する C または C++ の変数を指定します。 BEGIN_ADO_BINDING マクロと END_ADO_BINDING マクロの間のバインド エントリを角かっこで囲みます。 マクロをコンマまたはセミコロンで終了しないでください。 適切な区切り記号は、各マクロによって自動的に指定されます。
C または C++ 変数にマップされるフィールドごとに 1 つのバインド エントリを指定します。 マクロのADO_FIXED_LENGTH_ENTRY、ADO_NUMERIC_ENTRY、またはADO_VARIABLE_LENGTH_ENTRY ファミリの適切なメンバーを使用します。
アプリケーションで、CADORecordBinding から派生したクラスのインスタンスを作成します。 Recordset から IADORecordBinding インターフェイスを取得します。 次に、BindToRecordset メソッドを呼び出して、Recordset フィールドを C または C++ の変数にバインドします。
詳細については、「Visual C++ 拡張機能の例」を参照してください。
インターフェイス メソッド
IADORecordBinding インターフェイスには、BindToRecordset、AddNew、Update の 3 つのメソッドがあります。 各メソッドの唯一の引数は、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)
バインド エントリ マクロ
バインド エントリ マクロは、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()
パラメーター | 説明 |
---|---|
クラス | バインド エントリと C または C++ の変数を定義するクラス。 |
Ordinal | C または C++ の変数に対応する Recordset フィールドの 1 からカウントされる除数。 |
DataType | C または C++ の変数の同等の ADO データ型 (有効なデータ型の一覧については、「DataTypeEnum」を参照してください)。 必要に応じて、Recordset フィールドの値はこのデータ型に変換されます。 |
バッファー | Recordset フィールドの名前を保存する C または C++ 変数の名前。 |
[サイズ] | Bufferの最大サイズ (バイト単位)。 Buffer に変数長文字列が含まれる場合、終端の 0 の領域を確保します。 |
状態 | Buffer の内容が有効かどうか、および DataType へのフィールドの変換が成功したかどうかを示す変数の名前。 この変数の 2 つの最も重要な値は、変換が成功したことを意味する adFldOK と、フィールドの値が単に空ではなく VT_NULL 型の VARIANT になることを意味する adFldNull です。 Status に使用できる値は、次の表 "Status の値" に示します。 |
Modify | ブール型フラグ。TRUE の場合、ADO が、対応する Recordset フィールドを Buffer に含まれる値で更新することが許可されていることを示します。 ADO がバインドされたフィールドを更新できるようにするには、ブール型の modify パラメーターを TRUE に設定します。フィールドを調べるが、変更しない場合は FALSE を設定します。 |
[精度] | 数値変数で表すことができる桁数。 |
スケール | 数値変数の小数点以下桁数。 |
Length | Buffer内のデータの実際の長さが含まれる 4 バイト変数の名前。 |
状態値
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 | 更新時に、無効な status パラメーター。 |
adFldDefault | 13 | 更新時に、既定値が使用されました。 |