適用先: Access 2013、Office 2013
指定されたコレクション内のオブジェクトを更新して、データベースの現在のスキーマを反映させます。
構文
式 。更新
expression: Fields オブジェクトを表す変数。
注釈
Microsoft Access データベース エンジンで QueryDef、 Recordset、または TableDef の各オブジェクトの Fields コレクションに含まれる Field オブジェクトに使用される場所を確認するには、各 Field オブジェクトの OrdinalPosition プロパティを使用します。 Field オブジェクトの OrdinalPosition プロパティを変更しても、 Refresh メソッドを使用しない限り、コレクションにおける Field オブジェクトの順序は変化しない場合があります。
Refresh メソッドは、他のユーザーがデータベースを変更する可能性のあるマルチユーザー環境で使用します。 データベースに対する変更によって間接的に影響を受けるコレクションで、このメソッドを使用する必要があることもあります。 たとえば、 Users コレクションを変更した場合は、 Groups コレクションを使用する前に Groups コレクションを更新する必要があることがあります。
コレクションのオブジェクトはそのコレクションが最初に参照されたときに設定され、それ以降に他のユーザーが行った変更は自動的には反映されません。 他のユーザーがコレクションを変更した可能性がある場合は、コレクション内に特定のオブジェクトが存在する (または存在しない) ことを前提とするタスクをアプリケーションで実行する直前に、コレクションの Refresh メソッドを使用してください。 これにより、コレクションを最新の状態にしておくことができます。 一方で、Refresh を使用すると、パフォーマンスが大幅に低下する場合があります。
例
Refresh メソッドの次の使用例では、 OrdinalPosition データへの変更に基づいて、[商品区分] テーブルの Fields コレクションを更新します。 コレクションにおける Fields オブジェクトの順序は、 Refresh メソッドの使用後に初めて変化します。
Sub RefreshX()
Dim dbsNorthwind As Database
Dim tdfEmployees As TableDef
Dim aintPosition() As Integer
Dim astrFieldName() As String
Dim intTemp As Integer
Dim fldLoop As Field
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Set tdfEmployees = dbsNorthwind.TableDefs("Categories")
With tdfEmployees
' Display original OrdinalPosition data and store it
' in an array.
Debug.Print _
"Original OrdinalPosition data in TableDef."
ReDim aintPosition(0 To .Fields.Count - 1) As Integer
ReDim astrFieldName(0 To .Fields.Count - 1) As String
For intTemp = 0 To .Fields.Count - 1
aintPosition(intTemp) = _
.Fields(intTemp).OrdinalPosition
astrFieldName(intTemp) = .Fields(intTemp).Name
Debug.Print , aintPosition(intTemp), _
astrFieldName(intTemp)
Next intTemp
' Change OrdinalPosition data.
For Each fldLoop In .Fields
fldLoop.OrdinalPosition = _
100 - fldLoop.OrdinalPosition
Next fldLoop
Set fldLoop = Nothing
' Print new data.
Debug.Print "New OrdinalPosition data before Refresh."
For Each fldLoop In .Fields
Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name
Next fldLoop
.Fields.Refresh
' Print new data, showing how the field order has been
' changed.
Debug.Print "New OrdinalPosition data after Refresh."
For Each fldLoop In .Fields
Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name
Next fldLoop
' Restore original OrdinalPosition data.
For intTemp = 0 To .Fields.Count - 1
.Fields(astrFieldName(intTemp)).OrdinalPosition = _
aintPosition(intTemp)
Next intTemp
End With
dbsNorthwind.Close
End Sub