Accessでデータ処理をする際にワーキングテーブルとして一時的に用いるテーブルを作成することがあります。以下の記事では、DAOを用いたテーブル作成方法を紹介しています。
作成したテーブルはそのままにせず、削除することで保守性を高めると同時に、不用意な容量増加を防ぐことができます。
今回は、DAOを用いて対象テーブルの有無を確認し、対象テーブルがあった場合に削除する方法を紹介します。
サンプルとしては、すでに作成されている「WT_サンプルテーブル」(上述の紹介記事でDAOを用いたテーブル作成方法の際に出来上がったテーブルです。詳しくは、そちらの記事をご確認ください。)を削除する流れとします。
コードの実装
さて、さっそくDAOを用いたテーブル削除のコードを図1のように実装をしていきます。
ここで、今回作成するサンプルのコードは以下のようにしました。
Private Sub Table_Delete() '対象テーブル名を格納する変数を宣言 Dim strtbl As String '削除するテーブルを決める。 strtbl = "WT_サンプルテーブル" 'テーブル削除の確認 If MsgBox(strtbl & "を削除しますか?", vbYesNo) = vbNo ThenExit Sub
End If 'DAO用変数の宣言 Dim db As DAO.Database Dim tbldef As DAO.tabledef 'カレントデータベースへの接続 Set db = CurrentDb() '対象となるテーブルの有無を確認する。 'TableDefsコレクションでデータベースのテーブルを一つずつ '取得し、指定したテーブルに一致した For Each tbldef In db.TableDefsIf tbldef.Name = strtbl Then
'テーブルの削除
db.TableDefs.Delete strtbl
MsgBox "「" & strtbl & "」を削除しました。"
End If
Next 'データベースへの接続を閉じる。 db.Close End Sub
作成したコードの処理を一つずつ確認していきましょう。
まず、削除するテーブル名を格納するための変数を宣言しました。これは、この先何回か削除するテーブル名を用いた処理をしますので、テーブル名を変数に格納しておくことで、その後の保守性を高めています。
続いて、テーブルを削除するかを確認するプロセスです。今回用いるテーブル削除のコードはユーザー側に確認することなく、そのまま処理が進んでしまいますので、誤ってテーブルを削除しないための緩衝材としています。
さて、本題のDAOを用いたテーブル削除のルーチンに来ました。まずは、データベースに接続をし、続いて、Deleteメソッドを用いてテーブルを削除しますが、この際にはデータベースに指定されたTableDefsコレクションから指定したテーブルを対象とします。ただし、対象テーブルが存在しない場合はエラーが返されますので、TableDefsコレクションに対象となるテーブルが存在するかを、予めチェックし、該当するテーブルがあれば削除する処理としました(難しい内容なので、ここでは読み飛ばしていただいて問題ありません。)。
最後に、データベースの接続を閉じて終了となります。
動作確認
さて、作成したコードが実際にどのように動くかを確認していきます。
まずは、図2のように「WT_サンプルテーブル」が存在することを確認します。
図2の状態を確認した後、図1で示すVBA画面に戻り、今回作成した「Table_Delete」プロシージャにカーソルを合わせ、画面上にある「▶」アイコンをクリックしてください。これにより処理が開始されます。
図3に示すように、対象テーブル削除をするか否かのメッセージボックスが表示されますので、「はい」を選択すると、そのまま処理が進み処理が完了したメッセージボックスが改めて表示されます。
これで、一連の処理が完了しましたので、対象テーブルが削除されているかを確認します。図4のように、「WT_サンプルテーブル」がなくなっていれば成功です。
まとめ
今回は、DAOを用いてテーブルを削除する方法を紹介しました。一時的に処理したデータを格納するテーブル等、テーブルを作成しては、削除するといった処理をVBAで実装方法を学ぶと、より高度な処理が可能となり、業務効率を大幅に改善する一助になると思いますので、是非活用してみてください。
ここで紹介した方法は、以下の書籍でも紹介されていますので、ご参考になさってください。
スポンサーリンク
コメント