カレントDB以外のMDBからテーブルを削除する方法を説明します。
● 準備 ●
(1) 新規標準モジュールを用意し、以下のプロシージャを記述します。
(2) [テーブル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の
チェックを持ってきて下さい。
|