2017-06-22 19 views
1

アクセスデータベースにリンクされているすべてのテーブルを削除する必要があります。VBA内のリンクテーブルをすべて削除する

これは、すべてのリンクテーブル(ODBCおよびアクセスリンクテーブル)が返されるクエリです:

SELECT [MSysObjects].[Name] FROM MSysObjects WHERE Left([Name],1) <> "~" AND (MSysObjects.Type = 6 OR MSysObjects.Type = 4) ORDER BY MSysObjects.Name;

をしかし、今、私はすべて閉鎖するために、このDoCmd.DeleteObject acTable, Table.namefor eachをしなければならないと思います私のテーブルが、私はどのように行うのか分からない。

答えて

2

For Eachは順不同の順序でコレクションを反復処理し、反復処理中にそのコレクション内のオブジェクトを削除することによってエラーが発生します。

私はあなたが使用してテーブル定義オブジェクトを削除する逆の順序で順序付けられたシーケンスでコレクションを反復処理することを示唆している:

`を設定し、DBS = CurrentDb`
+1

多くの場合 – Andre

+0

、非常にあなたに感謝働いて行方不明

Dim dbs As DAO.TableDef Dim tdf As DAO.TableDef Set dbs = CurrentDb For index = dbs.TableDefs.Count – 1 To 0 Step -1 Set tdf = dbs.TableDefs(index) If Left(tdf.Connect, 5) = "ODBC;" Then DoCmd.DeleteObject acTable, tdf.Name End If Next index 

+0

@Andre:不足しているコードのおかげで、私は必要な変更を加えました。 – rshah4u

1
Dim rs as New ADODB.Recordset 
Dim strSql as string 

strSql = [put your sql statement here] 

rs.open strSql, CurrentProject.connection 
Do while not rs.eof 
    Docmd.DeleteObject acTable,rs.Fields(0) 
    rs.MoveNext 
Loop 
rs.Close 
+0

私はこのエラーがあります:オブジェクト変数はこの行で定義されていません "rst.Open sql、CurrentProject.Connection" –

+0

申し訳ありません、最初の行のインスタンス化。 'New'キーワードが欠けていました。 –

関連する問題