Access DAOでテーブルを作成する方法

DAO

Accessでより高度な処理をする際に一時的にテーブルを作成し、処理した値を格納するようなワーキングテーブルを作成することがあります。このように、Accessでテーブルを作成するためにはVBAで実装をすることになりますが、特にDAOを用いた方法が広く知られていますので、今回はその方法を紹介していきます。

なお、DAOを用いるための基本設定と、簡単なデータ操作の内容は以下の記事で紹介していますので、ご参考になさってください。

ここで、今回作成する内容は、上で紹介したDAOの基本設定に関する記事で作成したサンプルに追加する形で処理を実装していきますので、サンプル作成に際しては、以前に紹介しております記事も併せてご確認のほど、よろしくお願いいたします。

スポンサーリンク

DAOによるコードの追加

それでは、さっそくDAOを用いたテーブルの追加方法を見ていきましょう。

上述のとおり以前に作成したサンプルをベースとしますので、図1が初期状態となります。

図1 VBA実装前の画面

まずは、VBA画面を開き(Alt + F11キーの押下で開くことができます。)、図2に示すようにModule1に「Table_Append」モジュールを追加し、ここに以下のコードを追記していきます。

図2 DAOによるテーブル追加のコード

Private Sub Table_Append()

Dim db As DAO.Database
Dim tb As DAO.tabledef

'カレントデータベースへの接続
Set db = CurrentDb()

'テーブルの作成
Set tb = db.CreateTableDef("WT_サンプルテーブル")

'作成したテーブルにフィールドを追加する。
tb.Fields.Append tb.CreateField("ID", dbLong)
tb.Fields.Append tb.CreateField("氏名", dbText, 50)
tb.Fields.Append tb.CreateField("登録有無", dbBoolean)

'テーブルをデータベースに追加する。
db.TableDefs.Append tb

'データベースへの接続を閉じる。
db.Close

End Sub

ここで、上記処理内容について詳しく見ていきましょう。

まずは、DAOによる操作をするための変数宣言をした後、カレントデータベース(現在開いているデータベース)への接続をします。

続いて、「WT_サンプルテーブル」という名前のテーブルを作成し、このテーブルに追加するフィールドの定義を設定しています。

ここで用いている式は以下のとおりです。

CreateTableDef(Name、Attributes、SourceTableName、Connect)

なお、引数は次のとおりです。

名前必須/省略可能説明
Name省略可能新しい TableDef の一意の名前を表す、サブタイプが文字列型 (String) であるバリアント型 (Variant) の値。 
Attributes省略可能新しい TableDef オブジェクトの 1 つ以上の特性を示す定数 (または定数の組み合わせ)。
ScourceTableName省略可能データの元のソースである外部データベース内のテーブルの名前を含む Variant (String サブタイプ)。
Connect省略可能開いているデータベース、パススルークエリで使用されるデータベース、またはリンクテーブルのソースに関する情報を格納している、サブタイプが文字列型 (String) であるバリアント型 (Variant) の値。

そして、作成したテーブルにフィールドを追加するために次の式を用います。なお、フィールドの定義(データ定義)は表1に示すように設定できます。

CreateField(Name, Type, Size)

CreateFieldの各引数について

名前必須/省略可能説明
Name省略可能新しい Field オブジェクトの名前を一意に指定する文字列。
Type省略可能新しい Field オブジェクトのデータ型を決定する定数。 有効なデータ型については、表1を参照してください。
Size省略可能テキストを含む Field オブジェクトの最大サイズをバイト単位で示す整数。

表1 CreateFieldで設定できるデータ型一覧

可変長新型定数説明定数説明
dbBight多倍長整数型dbDecimal10進型
dbBinaryバイナリ型dbDouble倍精度浮動小数点型
dbBooleanブール型dbFloat浮動小数点型
dbByteバイト型dbGUIDGUID型
dbInteger整数型dbNumeric数値型
dbLongLong型(長整数型)dbSingle単精度浮動小数点型
dbLongBinaryロングバイナリ型dbTextテキスト型
dbMemoメモ型dbTime時刻型
dbChar文字型dbTimeStampタイムスタンプ型
dbCurrency通貨型dbVarBinary可変長バイナリ型
dbDate日付/時刻型adBigInt多倍長整数型

最後に「.Append」メソッドにより、これまで設定してきた条件に基づき、テーブルにフィールドを追加して、「.Close」メソッドによりデータベースを閉じる処理をします。

スポンサーリンク

VBAの実行

ここまでで、「WT_サンプルテーブル」を追加する処理を実装してきましたので、実際にこれを動かしてみましょう。VBA画面の「▶」をクリックします(図2のとおり。)。

そして、Access画面に戻り、「F5キー」を押下します(この段階で「WT_サンプルテーブル」は作成されていますが、画面の更新をしていないため表示がされていません。)。

これにより、図3に示すように「WT_サンプルテーブル」が追加されますので、デザインビューでフィールドの内容も確認しましょう。

図3 DAOによるテーブル追加後の画面

デザインビューで「WT_サンプルテーブル」を開くと、図4に示すとおり、「ID」、「氏名」及び「登録有無」フィールドが設定されており、それぞれのデータ型が「数値型」、「短いテキスト」及び「Yes/No型」であることが分かります。これは、VBAで設定した内容に一致しています。

図4 DAOにより設定したフィールドとデータ型

このようにして、DAOを用いることで新たにテーブルを追加することができました。

まとめ

今回は、DAOを用いて新たにテーブルを追加する方法を紹介しました。

新規テーブルを追加する用途としては、初めに紹介したとおり、一時的な処理をするために用いるワーキングテーブルの作成等が考えられると思います。特に、クエリなどで処理したデータを保存しておき、別の処理に用いる場合など、処理が複雑になるほどワーキングテーブルの存在は重宝するかと思います。

DAOによるテーブル作成については、以下の書籍でも紹介されていますので、ご参考になさってください。

スポンサーリンク

コメント

タイトルとURLをコピーしました