次の方法で共有


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 クラスから派生したクラスで宣言されます。CADORecordBindingCADORecordBinding クラスは、バインディング エントリ マクロによって内部的に定義されます。

ADO は、これらのマクロのパラメーターを OLE DB DBBINDING 構造体に内部的にマップし、OLE DB アクセサー オブジェクトを作成して、フィールドと変数間のデータの移動と変換を管理します。 OLE DB では、データは 3 つの部分で構成されます。データが格納される バッファーです。フィールドがバッファーに正常に格納されたかどうか、または変数をフィールドに復元する方法を示す 状態。データの 。 (詳細については、「OLE DB プログラマー リファレンス」の「データの取得と設定 (OLE DB)」を参照してください)。

ヘッダー ファイル

VISUAL C++ Extensions for ADO を使用するには、次のファイルをアプリケーションに含めます。

#include <icrsint.h>

レコードセットフィールドの設定

レコードセット フィールドを 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などの固定長データに対して提供されます。adTinyIntadInteger、adDouble などの数値データ。adCharadVarCharadVarBinaryなどの可変長データ。 adVarNumericを除くすべての数値型も固定長型です。 関心のないバインディング情報を除外できるように、各ファミリには異なるパラメーター セットがあります。

詳細については、「付録 A: データ型」、OLE DB プログラマー参照を参照してください。

バインド エントリを開始する

BEGIN_ADO_BINDING(クラス)

Fixed-Length データ

ADO_FIXED_LENGTH_ENTRY(序数、DataType、Buffer、Status、Modify)

ADO_FIXED_LENGTH_ENTRY2(Ordinal、DataType、Buffer、Modify)

数値データ

ADO_NUMERIC_ENTRY(順序、データタイプ、バッファ、精度、スケール、状態、変更)

ADO_NUMERIC_ENTRY2(序数、DataType、バッファー、有効桁数、小数点以下桁数、変更)

Variable-Length データ

ADO_VARIABLE_LENGTH_ENTRY(序数、データ型、バッファー、サイズ、状態、長さ、変更)

ADO_VARIABLE_LENGTH_ENTRY2(順序、データタイプ、バッファー、サイズ、ステータス、修正)

ADO_VARIABLE_LENGTH_ENTRY3(序数、DataType、バッファー、サイズ、長さ、変更)

ADO_VARIABLE_LENGTH_ENTRY4(序数、DataType、バッファー、サイズ、変更)

結合エントリの終了

END_ADO_BINDING()

パラメーター 説明
クラス バインディング エントリと C/C++ 変数が定義されているクラス。
序数 C/C++ 変数に対応する Recordset フィールドの 1 からカウントされる序数。
DataType C/C++ 変数の同等の ADO データ型 (有効なデータ型の一覧については、DataTypeEnum を参照してください)。 Recordset フィールドの値は、必要に応じてこのデータ型に変換されます。
バッファー Recordset フィールドが格納される C/C++ 変数の名前。
サイズの バッファー 最大サイズ (バイト単位)。 Buffer に可変長文字列が含まれる場合は、末尾にゼロを指定できます。
状態 Buffer の内容が有効であるかどうか、およびデータ型 への変換が成功したかどうかを示す変数の名前。

この変数の2つの最も重要な値は adFldOKで、これは変換が成功したことを意味します。そしてもう一方は adFldNullで、これはフィールドの値が単に空ではなく、VT_NULL型のVARIANTになることを意味します。

状態 に使用できる値は、次の表 「Status Values」に示されています。
変更 ブール型フラグ。TRUE の場合は、ADO が対応する Recordset フィールドをバッファー に含まれる値で更新示します。

ブール パラメーターを TRUE に設定して、ADO でバインドされたフィールドを更新できるようにします。フィールドを調べて変更しない場合は FALSE を設定します。
精度 数値変数で表すことができる桁数。
スケール 数値変数の小数点以下の桁数。
の長さ Buffer内のデータの実際の長さを格納する 4 バイト変数の名前。

状態の値

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 更新時に既定値が使用されました。

関連項目

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