Fields コレクション
Fields コレクションは、ADO の組み込みコレクションの 1 つです。 コレクションは、単位と呼ばれるアイテムの順序付けされたセットです。 ADO コレクションの詳細については、「ADO オブジェクト モデルの 」を参照してください。
Fields コレクションには、Recordset内のすべてのフィールド (列) の Field オブジェクトが含まれています。 すべての ADO コレクションと同様に、Count プロパティと Item プロパティ、および Append メソッドと Refresh メソッドがあります。 また、CancelUpdate、Delete、Resync、および他の ADO コレクションでは使用できない Update メソッドも含まれています。
Fields コレクションを調べる
このセクションで紹介したサンプル Recordset の Fields コレクションについて考えてみます。 サンプル 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 メソッドが、開いている Recordset の Fields コレクション、または 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」を参照してください。