次の方法で共有


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++ の変数にバインドする

  1. CADORecordBinding クラスから派生したクラスを作成します。

  2. 派生クラスで、バインド エントリと対応する C または C++ の変数を指定します。 BEGIN_ADO_BINDING マクロと END_ADO_BINDING マクロの間のバインド エントリを角かっこで囲みます。 マクロをコンマまたはセミコロンで終了しないでください。 適切な区切り記号は、各マクロによって自動的に指定されます。

    C または C++ 変数にマップされるフィールドごとに 1 つのバインド エントリを指定します。 マクロのADO_FIXED_LENGTH_ENTRYADO_NUMERIC_ENTRY、またはADO_VARIABLE_LENGTH_ENTRY ファミリの適切なメンバーを使用します。

  3. アプリケーションで、CADORecordBinding から派生したクラスのインスタンスを作成します。 Recordset から IADORecordBinding インターフェイスを取得します。 次に、BindToRecordset メソッドを呼び出して、Recordset フィールドを C または C++ の変数にバインドします。

詳細については、「Visual C++ 拡張機能の例」を参照してください。

インターフェイス メソッド

IADORecordBinding インターフェイスには、BindToRecordsetAddNewUpdate の 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 フィールドと変数の関連付けを定義します。 開始マクロと終了マクロは、バインド エントリのセットを区切ります。

マクロのファミリは、固定長データ (adDateadBoolean など)、数値データ (adTinyIntadIntegeradDouble など)、可変長データ (adCharadVarCharadVarBinary など) に対して提供されます。 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 変数の値は、フィールドが変数に正常にコピーされたかどうかを示します。

データを設定するときに、StatusadFldNull に設定して、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 更新時に、既定値が使用されました。

参照

Visual C++ 拡張機能の例Visual C++ Extensions のヘッダー