ボンジュール・マドモアゼル

本サイトの情報は自己責任にてご利用下さい。

[Microsoft Access] ADOX Table を Append し Connection.Close で「Microsoft Access for Windows は動作を停止しました」のエラーが発生

 
下記の現象は Access 2000 で確認したもの。

ADOX.Column オブジェクトの ParentCatalog をサブプロシージャのなかで設定して、
それより上位のプロシージャで Connection をクローズするとエラーが発生する。

この現象は以下のサンプルコードによって確認できる。
以下のコードにおいて testNonError は testError で呼び出している createTable の処理を
展開して実行しているだけなので testNonError と testError の処理内容は、ほとんど同じである。
両プロシージャを実行すると testNonError は正常終了するが testError の方は
createTable の呼出し後、接続をクローズするところでエラーが発生する。

このエラーは、サブプロシージャの clm.ParentCatalog = cat が原因となっているようで、(この行がないとエラーは発生しない)
対処として cat.ActiveConnection = Nothing を処理しておくと、エラーは発生しなくなる。
Option Compare Database

Option Explicit

Sub testNonError()

dropTable "TEST_TABLE"

Dim cnn As ADODB.Connection
Set cnn = CurrentProject.Connection

Dim cat As ADOX.Catalog
Set cat = CreateObject("ADOX.Catalog")
cat.ActiveConnection = cnn

Dim tbl As ADOX.Table
Set tbl = CreateObject("ADOX.Table")
tbl.Name = "TEST_TABLE"

tbl.Columns.Append "TEST_FIELD", adVarWChar, 10

Dim clm As ADOX.Column
Set clm = tbl.Columns("TEST_FIELD")

clm.ParentCatalog = cat

cat.Tables.Append tbl

'Error does not occur.
cnn.Close

End Sub

Sub testError()

dropTable "TEST_TABLE"

Dim cnn As ADODB.Connection
Set cnn = CurrentProject.Connection

createTable cnn

'error occurs. Microsoft Access has stopped working
cnn.Close

End Sub

Sub createTable(cnn As ADODB.Connection)

Dim cat As ADOX.Catalog
Set cat = CreateObject("ADOX.Catalog")
cat.ActiveConnection = cnn

Dim tbl As ADOX.Table
Set tbl = CreateObject("ADOX.Table")
tbl.Name = "TEST_TABLE"

tbl.Columns.Append "TEST_FIELD", adVarWChar, 10

Dim clm As ADOX.Column
Set clm = tbl.Columns("TEST_FIELD")

'error is caused by this line.
clm.ParentCatalog = cat

cat.Tables.Append tbl

'error is fixed by this line.
'cat.ActiveConnection = Nothing
End Sub

Sub dropTable(TableName As String)
On Error Resume Next
DoCmd.DeleteObject acTable, TableName
On Error GoTo 0
End Sub
<<DAO TableDefs.Refresh, QueryDefs.Refresh を実行しても最新状態が反映されない。 | ホーム | Queue を LIFO のスタックとして使う>>

コメント

コメントの投稿

管理者にだけ表示を許可する

画像の文字を半角数字で下記ボックスに記入ください。
文字が読みにくい場合はブラウザの更新をすると新しい文字列が表示されます。