Share via


Fields コレクション

Fields コレクションは、ADO の組み込みコレクションの 1 つです。 コレクションは、ユニットとして参照できる項目の順序付けされたセットです。 ADO コレクションの詳細については、ADO オブジェクト モデルに関するページを参照してください。

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

Fields コレクションの確認

このセクションで紹介したサンプル レコードセットFields コレクションについて考えてみましょう。 サンプル レコードセットは 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 プロパティを使用して、フィールドに関する情報を取得できます。 Field のクエリの詳細については、「Field オブジェクト」を参照してください。

列のカウント

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

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

フィールドに移動する

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

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

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

Refresh メソッドの使用

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

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

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

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

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

'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 オブジェクトの詳細については、「レコードとストリーム」を参照してください。

参照

階層レコードセットの作成