次の方法で共有


Fields コレクション

Fields コレクションは、ADO の組み込みコレクションの 1 つです。 コレクションは、単位と呼ばれるアイテムの順序付けされたセットです。 ADO コレクションの詳細については、「ADO オブジェクト モデルの 」を参照してください。

Fields コレクションには、Recordset内のすべてのフィールド (列) の Field オブジェクトが含まれています。 すべての ADO コレクションと同様に、Count プロパティと Item プロパティ、および Append メソッドと Refresh メソッドがあります。 また、CancelUpdateDeleteResyncおよび他の ADO コレクションでは使用できない Update メソッドも含まれています。

Fields コレクションを調べる

このセクションで紹介したサンプル RecordsetFields コレクションについて考えてみます。 サンプル Recordset は SQL ステートメントから派生しました

SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7  

したがって、Recordset Fields コレクションには 3 つのフィールドが含まれていることがわかります。

'BeginWalkFields  
    Dim objFields As ADODB.Fields  
    Dim intLoop As Integer  
  
    objRs.Open strSQL, strConnStr, adOpenForwardOnly, adLockReadOnly, adCmdText  
  
    Set objFields = objRs.Fields  
  
    For intLoop = 0 To (objFields.Count - 1)  
        Debug.Print objFields.Item(intLoop).Name  
    Next  
'EndWalkFields  

このコードは、Count プロパティを使用して Fields コレクション内の Field オブジェクトの数を決定し、コレクションをループ処理して、各 Field オブジェクトの Name プロパティの値を返します。 さらに多くの Field プロパティを使用して、フィールドに関する情報を取得できます。 フィールドのクエリの詳細については、フィールドオブジェクトを参照してください。

列数のカウント

予想どおり、Count プロパティは、Fields コレクション内の Field オブジェクトの実際の数を返します。 コレクションのメンバーの番号付けは 0 で始まるので、常に 0 から始まり、Count プロパティの値から 1 を引いた値で終わるコード ループを記述する必要があります。 Microsoft Visual Basic を使用していて、Count プロパティをチェックせずにコレクションのメンバーをループする場合は、For Each...Next コマンドを使用してください。

Count プロパティが 0 の場合、コレクション内にオブジェクトはありません。

フィールドへのアクセス

他の ADO コレクションと同様に、Item プロパティはコレクションの既定のプロパティです。 渡された名前またはインデックスで指定された個々の Field オブジェクトを返します。 したがって、次のステートメントは、Recordset サンプルと同等です。

objField = objRecordset.Fields.Item("ProductID")  
objField = objRecordset.Fields("ProductID")  
objField = objRecordset.Fields.Item(0)  
objField = objRecordset.Fields(0)  

これらのメソッドが同等の場合、どちらが最適ですか? 事によりけりです。 インデックスを使用してコレクションから Field を取得すると、文字列検索を実行しなくても Field に直接アクセスするため、高速になります。 一方、コレクション内で フィールドの順序はわかっている必要があります。順序が変更された場合、フィールドの インデックスへの参照は、発生する場所を問わず変更する必要があります。 少し遅くなりますが、Field の名前の使用は、コレクション内の Fields の順序に依存しないため、柔軟性が高くなります。

Refresh メソッドの使用

他の ADO コレクションとは異なり、Fields コレクションで Refresh メソッドを使用しても、表示効果はありません。 基になるデータベース構造から変更を取得するには、Requery メソッドを使用するか、Recordset オブジェクトがブックマークをサポートしていない場合は、MoveFirst メソッドを使用する必要があります。これにより、コマンドがプロバイダーに対して再度実行されます。

レコードセットへのフィールドの追加

Append メソッドは、Recordsetにフィールドを追加するために使用されます。

Append メソッドを使用すると、データ ソースへの接続を開かずにプログラムで Recordset を作成できます。 Append メソッドが、開いている RecordsetFields コレクション、または ActiveConnection プロパティが設定されている Recordset で呼び出されると、実行時エラーが発生します。 フィールドを追加できるのは、開いていない データ ソースにまだ接続されていないレコードセット だけです。 ただし、新しく追加された フィールドの値を指定するには、最初に Recordset を開く必要があります。

開発者は多くの場合、データを一時的に格納する場所を必要とします。また、ユーザー インターフェイスでデータ バインディングに参加できるように、サーバーから来たデータのように機能させる必要があります。 ADO (Microsoft Cursor Service for OLE DBと組み合わせて) を使用すると、開発者は列情報を指定し、Open 呼び出すことによって、空の Recordset オブジェクトを作成できます。 次の例では、新しい Recordset オブジェクトに 3 つの新しいフィールドが追加されています。 その後、Recordset が開き、2 つの新しいレコードが追加され、Recordset がファイルに保持されます。 (さらに、レコードセット 永続化の詳細については、「データの更新と永続化」を参照してください)。

'BeginFabricate  
    Dim objRs As ADODB.Recordset  
    Set objRs = New ADODB.Recordset  
  
    With objRs.Fields  
        .Append "StudentID", adChar, 11, adFldUpdatable  
        .Append "FullName", adVarChar, 50, adFldUpdatable  
        .Append "PhoneNmbr", adVarChar, 20, adFldUpdatable  
    End With  
  
    With objRs  
        .Open  
  
        .AddNew  
        .Fields(0) = "123-45-6789"  
        .Fields(1) = "John Doe"  
        .Fields(2) = "(425) 555-5555"  
        .Update  
  
        .AddNew  
        .Fields(0) = "123-45-6780"  
        .Fields(1) = "Jane Doe"  
        .Fields(2) = "(615) 555-1212"  
        .Update  
    End With  
  
    objRs.Save App.Path & "FabriTest.adtg", adPersistADTG  
  
    objRs.Close  
'EndFabricate  

Fields Append メソッドの使用方法は、Recordset オブジェクトと Record オブジェクトによって異なります。 Record オブジェクトの詳細については、「Records and Streams」を参照してください。

関連項目

階層レコードセットを作成する