次の方法で共有


フィールド オブジェクト

Field オブジェクトは、通常、データベース テーブル内の列に対応します。 ただし、フィールド は、章と呼ばれる別の Recordsetへのポインターを表すこともできます。 章の列などの例外については、このガイドの後半で説明します。

現在のレコードのデータを設定または取得するには、Field オブジェクトの Value プロパティを使用します。 プロバイダーが公開する機能によっては、Field オブジェクトの一部のコレクション、メソッド、またはプロパティが使用できない場合があります。

Field オブジェクトのコレクション、メソッド、およびプロパティを使用すると、次の操作を実行できます。

  • Name プロパティを使用して、フィールドの名前を返します。

  • Value プロパティを使用して、フィールド内のデータを表示または変更します。 Value は、Field オブジェクトの既定のプロパティです。

  • TypePrecision、および NumericScale プロパティを使用して、フィールドの基本的な特性を返します。

  • DefinedSize プロパティを使用して、フィールドの宣言されたサイズを返します。

  • ActualSize プロパティを使用して、特定のフィールド内のデータの実際のサイズを返します。

  • Attributes プロパティと Properties コレクションを使用して、特定のフィールドでサポートされる機能の種類を決定します。

  • AppendChunk および GetChunk メソッドを使用して、長いバイナリまたは長い文字データを含むフィールドの値を操作します。

プロバイダーがバッチ更新をサポートしている場合は、OriginalValueUnderlyingValue プロパティを使用して、バッチ更新中のフィールド値の不一致を解決します。

フィールドの記述

以下のトピックでは、Field オブジェクト自体 、つまりフィールドに関するメタデータを記述する情報を表す Field オブジェクトのプロパティについて説明します。 この情報を使用して、Recordsetのスキーマに関する多くの情報を確認できます。 これらのプロパティには、DefinedSize、および ActualSizeNameNumericScalePrecisionが含まれます。

データ型の検出

Type プロパティは、フィールドのデータ型を示します。 ADO でサポートされているデータ型列挙定数については、「ADO プログラマリファレンスの dataTypeEnum で説明されています。

adNumeric などの浮動小数点数値型場合は、詳細情報を取得できます。 NumericScale プロパティは、Fieldの値を表すために使用される小数点の右側の桁数を示します。 Precision プロパティは、Fieldの値を表すために使用される最大桁数を指定します。

フィールド サイズの決定

DefinedSize プロパティを使用して、Field オブジェクトのデータ容量を決定します。

Field オブジェクトの値の実際の長さを取得するには、ActualSize プロパティを使用します。 すべてのフィールドで、ActualSize プロパティは読み取り専用です。 Field オブジェクトの値の長さを ADO が判断できない場合、ActualSize プロパティは adUnknown 返します。

DefinedSize プロパティと ActualSize プロパティの目的は異なります。 たとえば、adVarChar の宣言された型を持つ Field オブジェクトと、1 文字 を含む DefinedSize プロパティ値が 50 であるとします。 返される ActualSize プロパティ値は、1 文字の長さ (バイト単位) です。

フィールドの内容の決定

データ ソースの列の識別子は、FieldName プロパティによって表されます。 Field オブジェクトの Value プロパティは、フィールドの実際のデータ コンテンツを取得または設定します。 これが既定のプロパティです。

フィールド内のデータを変更するには、Value プロパティを正しい型の新しい値に設定します。 カーソルの種類は、フィールドの内容を変更するための更新をサポートする必要があります。 ここではバッチ モードではデータベースの検証は行われません。そのため、このような場合に UpdateBatch 呼び出すときにエラーを確認する必要があります。 また、一部のプロバイダーでは、ADO Field オブジェクトの UnderlyingValue プロパティと OriginalValue プロパティをサポートしており、バッチ更新を実行する際の競合の解決を支援します。 このような競合を解決する方法の詳細については、「データの編集」を参照してください。

手記

レコードセットフィールド 値は、新しい フィールドレコードセットに追加するときに設定できません。 代わりに、新しい フィールド を閉じた Recordsetに追加できます。 その後、Recordset を開く必要があります。その場合にのみ、これらの フィールドに値を割り当てることができます。

その他のフィールド情報の取得

ADO オブジェクトには、組み込みと動的の 2 種類のプロパティがあります。 ここまでは、Field オブジェクトの組み込みプロパティについてのみ説明しました。

組み込みプロパティは、ADO で実装され、MyObject.Property 構文を使用して新しいオブジェクトですぐに使用できるプロパティです。 これらは、オブジェクトの Properties コレクション内のオブジェクト プロパティ オブジェクトとして表示されません。

動的プロパティは、基になるデータ プロバイダーによって定義され、適切な ADO オブジェクトの Properties コレクションに表示されます。 たとえば、プロバイダーに固有のプロパティは、Recordset オブジェクトがトランザクションまたは更新をサポートしているかどうかを示す場合があります。 これらの追加のプロパティは、Recordset オブジェクトの Properties コレクション内の Property オブジェクトとして表示されます。 動的プロパティは、構文 MyObject.Properties(0) または MyObject.Properties("Name")を使用して、コレクションを介してのみ参照できます。

どちらの種類のプロパティも削除できません。

動的 Property オブジェクトには、独自の 4 つの組み込みプロパティがあります。

  • Name プロパティは、プロパティを識別する文字列です。

  • Type プロパティは、プロパティのデータ型を指定する整数です。

  • Value プロパティは、プロパティ設定を含むバリアントです。 Value は、Property オブジェクトの既定のプロパティです。

  • 属性 プロパティは、プロバイダーに固有のプロパティの特性を示す 長い 値です。

Field オブジェクトの Properties コレクションには、フィールドに関する追加のメタデータが含まれています。 このコレクションの内容は、プロバイダーによって異なります。 次のコード例では、このセクションの冒頭で紹介したサンプル RecordsetProperties コレクションを調べます。 最初に、コレクションの内容を確認します。 このコードでは、OLE DB Provider for SQL Serverを使用するため、Properties コレクションには、そのプロバイダーに関連する情報が含まれます。

'BeginFieldProps  
    Dim objProp As ADODB.Property  
  
    For intLoop = 0 To (objFields.Count - 1)  
        Debug.Print objFields.Item(intLoop).Name  
  
        For Each objProp In objFields(intLoop).Properties  
            Debug.Print vbTab & objProp.Name & " = " & objProp.Value  
        Next objProp  
    Next intLoop  
'EndFieldProps  

バイナリ データの処理

Field オブジェクトに長いバイナリまたは文字データを入れるために、AppendChunk メソッドを使用します。 システム メモリが制限されている場合は、AppendChunk メソッドを使用して、全体ではなく、一部の長い値を操作できます。

Field オブジェクトの Attributes プロパティの adFldLong ビットが True に設定されている場合は、そのフィールドに対して AppendChunk メソッドを使用できます。

Field オブジェクトの最初の AppendChunk 呼び出しは、既存のデータを上書きしてフィールドにデータを書き込みます。 その後 AppendChunk 呼び出しが既存のデータに追加されます。 あるフィールドにデータを追加し、現在のレコード内の別のフィールドの値を設定または読み取る場合、ADO では、最初のフィールドへのデータの追加が完了していることを前提としています。 最初のフィールドで AppendChunk メソッドをもう一度呼び出すと、ADO は新しい AppendChunk 操作として呼び出しを解釈し、既存のデータを上書きします。 他の Recordset オブジェクトのフィールドにアクセスしても、最初の Recordset オブジェクトのクローンではないこれらのオブジェクトは、AppendChunk 操作を中断することはありません。

Field オブジェクトの GetChunk メソッドを使用して、長いバイナリデータまたは文字データの一部またはすべてを取得します。 システム メモリが制限されている場合は、GetChunk メソッドを使用して、全体ではなく、一部の長い値を操作できます。

GetChunk 呼び出しから返されるデータは、変数 割り当てられます。 Size が残りのデータより大きい場合、GetChunk メソッドは、空のスペースで変数 埋め込まずに残りのデータのみを返します。 フィールドが空の場合、GetChunk メソッドは null 値を返します。

それぞれの後続の GetChunk 呼び出しは、前の GetChunk 呼び出しが終了した地点からデータを取得します。 ただし、あるフィールドからデータを取得し、現在のレコード内の別のフィールドの値を設定または読み取る場合、ADO では最初のフィールドからのデータの取得が完了したと見なされます。 最初のフィールドで GetChunk メソッドを再度呼び出すと、ADO はその呼び出しを新しい GetChunk 操作として解釈し、データの先頭から読み取りを始めます。 最初の Recordset オブジェクトのクローンではない他の Recordset オブジェクトのフィールドにアクセスしても、GetChunk 操作は中断されません。

Field オブジェクトの Attributes プロパティの adFldLong ビットが True に設定されている場合は、そのフィールドに対して GetChunk メソッドを使用できます。

Field オブジェクトで GetChunk または AppendChunk メソッドを使用するときに、現在のレコードがない場合は、エラー 3021 (現在のレコードなし) が発生します。

これらのメソッドを使用してバイナリ データを操作する例については、「ADO プログラマー リファレンスの例 AppendChunk メソッド および GetChunk メソッド を参照してください。