適用先: Access 2013、Office 2013
ActiveConnection プロパティを Nothing に設定すると、カタログが閉じます。 関連付けられたコレクションは、空になります。 カタログのスキーマ オブジェクトから作成されたオブジェクトは、すべて孤立化します。 キャッシュされたオブジェクトのプロパティはいずれも使用できますが、プロバイダーの呼び出しが必要なプロパティを取得しようとすると失敗します。
' BeginCloseConnectionVB
Sub Main()
On Error GoTo CloseConnectionByNothingError
Dim cnn As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table
cnn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
"Data Source= 'c:\Program Files\Microsoft Office\" & _
"Office\Samples\Northwind.mdb';"
Set cat.ActiveConnection = cnn
Set tbl = cat.Tables(0)
Debug.Print tbl.Type ' Cache tbl.Type info
Set cat.ActiveConnection = Nothing
Debug.Print tbl.Type ' tbl is orphaned
' Previous line will succeed if this was cached
Debug.Print tbl.Columns(0).DefinedSize
' Previous line will fail if this info has not been cached
'Clean up
cnn.Close
Set cat = Nothing
Set cnn = Nothing
Exit Sub
CloseConnectionByNothingError:
Set cat = Nothing
If Not cnn Is Nothing Then
If cnn.State = adStateOpen Then cnn.Close
End If
Set cnn = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
End Sub
' EndCloseConnectionVB
カタログを開くために使用した Connection オブジェクトを閉じると、 ActiveConnection プロパティを Nothing に設定した場合と同じように、カタログが閉じます。
Sub CloseConnection()
On Error GoTo CloseConnectionError
Dim cnn As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table
cnn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
"Data Source= 'c:\Program Files\Microsoft Office\" & _
"Office\Samples\Northwind.mdb';"
Set cat.ActiveConnection = cnn
Set tbl = cat.Tables(0)
Debug.Print tbl.Type ' Cache tbl.Type info
cnn.Close
Debug.Print tbl.Type ' tbl is orphaned
' Previous line will succeed if this was cached
Debug.Print tbl.Columns(0).DefinedSize
' Previous line will fail if this info has not been cached
'Clean up
Set cat = Nothing
Set cnn = Nothing
Exit Sub
CloseConnectionError:
Set cat = Nothing
If Not cnn Is Nothing Then
If cnn.State = adStateOpen Then cnn.Close
End If
Set cnn = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
End Sub
' EndCloseConnection2VB