次の方法で共有


Visual C++ Extensions の使用

適用先: Access 2013、Office 2013

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 オブジェクトによって実装されます。 ユーザー自身が実装をコーディングする必要はありません。

バインディング エントリ

The Visual C++ Extensions for ADO map fields of a Recordset object to C/C++ variables. フィールドと変数の間のマッピングの定義は、 バインド エントリと呼ばれます。 Macros provide binding entries for numeric, fixed-length, and variable-length data. The binding entries and C/C++ variables are declared in a class derived from the Visual C++ Extensions class, CADORecordBinding. The CADORecordBinding class is defined internally by the binding entry macros.

ADO internally maps the parameters in these macros to an OLE DB DBBINDING structure and creates an OLE DB Accessor object to manage the movement and conversion of data between fields and variables. OLE DB は、データを 3 つの部分で構成されるように定義します。データが格納される バッファー 。フィールドがバッファーに正常に格納されたかどうか、または変数をフィールドに復元する方法を示す 状態 。とデータの 長さ 。 (詳細については、「 OLE DB プログラマリファレンス、第 6 章: データの取得と設定」を参照してください)。

ヘッダー ファイル

ADO 用 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++ Extensions の例」を参照してください。

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

IADORecordBinding インターフェイスには、3 つのメソッド BindToRecordsetAddNew 、および Update があります。 各メソッドに対する唯一の引数は、 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(クラス)

固定長データ

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 フィールドの値は、必要に応じてこのデータ型に変換されます。

Buffer

Recordset フィールドを格納する C/C++ 変数の名前です。

サイズ

バイト数で示す Buffer の最大サイズです。 Buffer に可変長文字列を格納する場合は、末尾のゼロを含んだサイズになります。

状態

Buffer の内容が有効かどうか、および DataType へのフィールドの変換が成功したかどうかを示す変数の名前です。 この変数で最も重要な 2 つの値は、変換が成功したことを示す adFldOK と、フィールドの値が VT_NULL 型の VARIANT であって単なる空ではないことを示す adFldNull です。 Status に設定される可能性のある値については、後の表「Status の値」を参照してください。

Modify

ブール型のフラグです。TRUE の場合は、ADO が対応する Recordset フィールドを Buffer の値で更新できることを示します。 バインドされたフィールドを ADO が更新できるようにするには、ブール型の modify パラメーターを TRUE に設定します。確認だけでフィールドを変更しない場合は FALSE に設定します。

精度

数値変数で表すことのできる桁数です。

Scale

数値変数での小数点以下の桁数です。

Length

Buffer 内のデータの実際の長さを格納する 4 バイト変数の名前です。

Status の値

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

更新時に、無効なステータス パラメーターがありました。

adFldDefault

13

更新時に、既定値が使用されました。