●概要●
カレントDB以外のMDBからテーブルを削除する方法を説明します。
●準備●
- 新規標準モジュールを用意し、以下のプロシージャを記述します。
- [テーブル1]テーブルを作成します。
後ほど削除するものですので、中身は何でも結構です。
●サンプルコード●
'【引数説明】
'DbName :データベース名のフルパス
'tblName :削除したいテーブル名
Public Function DeleteTable(Optional DbName As String = "", _
Optional tblName As String = "")
'エラートラップ
On Error GoTo DeleteTable_Err:
'変数宣言
Dim DB As DAO.Database '接続先データベース
Dim Tbl As DAO.TableDef 'テーブルオブジェクト
Dim strSQL As String 'SQL文用文字列
'データベース接続
If DbName = "" Then
'データベース名が空白の場合はCurrentDbを指定
Set DB = CurrentDb
Else
'指定MDBを開く
Set DB = OpenDatabase(DbName)
End If
'テーブル削除
If tblName = "" Then
'テーブル名が空白の場合は全削除
For Each Tbl In DB.TableDefs
'システムテーブルの除外
If Left(Tbl.Name, 4) <> "MSys" Then
strSQL = "Drop Table " & Tbl.Name & ";"
DB.Execute strSQL
End If
Next
Else
'指定テーブルを削除
strSQL = "Drop Table " & tblName & ";"
DB.Execute strSQL
End If
'終了処理
DB.Close
Resume_Point:
Set Tbl = Nothing
Set DB = Nothing
Exit Function
DeleteTable_Err:
MsgBox Err.Number & vbCrLf & Err.Description
GoTo Resume_Point:
End Function
'実行プロシージャ
Private Sub DeleteTest()
Call DeleteTable(, "テーブル1")
End Sub
●動作確認●
サンプルプロシージャDeleteTestを実行して下さい。サンプルでは第1引数を省略していますので、カレントDB内のテーブルを削除します。
実行後[テーブル1]テーブルが無くなっている事を確認して下さい。
●詳細●
サンプルではDAO.DatabaseオブジェクトのExecuteメソッドを使用して削除クエリを実行しています。
テーブルを削除するには、他にもTableDefオブジェクトを使用する方法、DoCmdオブジェクトのRunSQLメソッドを使用する方法等がありますが、前者は処理が冗長になる点が、後者はカレントDB以外のMDBのテーブルを削除できないため、Executeメソッドを使用しています。
サンプル内では、システムテーブルの判断にあたり単純にテーブル名を取得して判断していますが、隠しテーブルの削除を抑制するなど、処理を厳密に行うためにはAttributesプロパティにて判断する必要があるでしょう。
●注意●
※ このサンプルはテーブルを削除します ※
くれぐれも必要なデータを削除することの無いように、バックアップを取ってからテストするなど、十分に注意して下さい。
●備考●
Access2000の場合、デフォルトではDAOに参照設定されていません。
Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOのチェックを持ってきて下さい。