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 クラスから派生したクラスで宣言されます。CADORecordBinding。 CADORecordBinding クラスは、バインディング エントリ マクロによって内部的に定義されます。
ADO は、これらのマクロのパラメーターを OLE DB DBBINDING 構造体に内部的にマップし、OLE DB アクセサー オブジェクトを作成して、フィールドと変数間のデータの移動と変換を管理します。 OLE DB では、データは 3 つの部分で構成されます。データが格納される バッファーです。フィールドがバッファーに正常に格納されたかどうか、または変数をフィールドに復元する方法を示す 状態。データの 長。 (詳細については、「OLE DB プログラマー リファレンス」の「データの取得と設定 (OLE DB)」を参照してください)。
ヘッダー ファイル
VISUAL C++ Extensions for ADO を使用するには、次のファイルをアプリケーションに含めます。
#include <icrsint.h>
レコードセットフィールドの設定
レコードセット フィールドを 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を除くすべての数値型も固定長型です。 関心のないバインディング情報を除外できるように、各ファミリには異なるパラメーター セットがあります。
詳細については、「付録 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 | 更新時に既定値が使用されました。 |