Home > 即効テクニック > AccessVBA > データベース・データ保護 > 他MDB内にあるテーブルを削除する

即効テクニック

データベース・データ保護

他MDB内にあるテーブルを削除する

(Access 97)
●概要●
カレント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のチェックを持ってきて下さい。