Accessでより高度な処理をする際に一時的にテーブルを作成し、処理した値を格納するようなワーキングテーブルを作成することがあります。このように、Accessでテーブルを作成するためにはVBAで実装をすることになりますが、特にDAOを用いた方法が広く知られていますので、今回はその方法を紹介していきます。
なお、DAOを用いるための基本設定と、簡単なデータ操作の内容は以下の記事で紹介していますので、ご参考になさってください。
ここで、今回作成する内容は、上で紹介したDAOの基本設定に関する記事で作成したサンプルに追加する形で処理を実装していきますので、サンプル作成に際しては、以前に紹介しております記事も併せてご確認のほど、よろしくお願いいたします。
DAOによるコードの追加
それでは、さっそくDAOを用いたテーブルの追加方法を見ていきましょう。
上述のとおり以前に作成したサンプルをベースとしますので、図1が初期状態となります。
まずは、VBA画面を開き(Alt + F11キーの押下で開くことができます。)、図2に示すようにModule1に「Table_Append」モジュールを追加し、ここに以下のコードを追記していきます。
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 | 多倍長整数型 | dbDecimal | 10進型 |
dbBinary | バイナリ型 | dbDouble | 倍精度浮動小数点型 |
dbBoolean | ブール型 | dbFloat | 浮動小数点型 |
dbByte | バイト型 | dbGUID | GUID型 |
dbInteger | 整数型 | dbNumeric | 数値型 |
dbLong | Long型(長整数型) | dbSingle | 単精度浮動小数点型 |
dbLongBinary | ロングバイナリ型 | dbText | テキスト型 |
dbMemo | メモ型 | dbTime | 時刻型 |
dbChar | 文字型 | dbTimeStamp | タイムスタンプ型 |
dbCurrency | 通貨型 | dbVarBinary | 可変長バイナリ型 |
dbDate | 日付/時刻型 | adBigInt | 多倍長整数型 |
最後に「.Append」メソッドにより、これまで設定してきた条件に基づき、テーブルにフィールドを追加して、「.Close」メソッドによりデータベースを閉じる処理をします。
VBAの実行
ここまでで、「WT_サンプルテーブル」を追加する処理を実装してきましたので、実際にこれを動かしてみましょう。VBA画面の「▶」をクリックします(図2のとおり。)。
そして、Access画面に戻り、「F5キー」を押下します(この段階で「WT_サンプルテーブル」は作成されていますが、画面の更新をしていないため表示がされていません。)。
これにより、図3に示すように「WT_サンプルテーブル」が追加されますので、デザインビューでフィールドの内容も確認しましょう。
デザインビューで「WT_サンプルテーブル」を開くと、図4に示すとおり、「ID」、「氏名」及び「登録有無」フィールドが設定されており、それぞれのデータ型が「数値型」、「短いテキスト」及び「Yes/No型」であることが分かります。これは、VBAで設定した内容に一致しています。
このようにして、DAOを用いることで新たにテーブルを追加することができました。
まとめ
今回は、DAOを用いて新たにテーブルを追加する方法を紹介しました。
新規テーブルを追加する用途としては、初めに紹介したとおり、一時的な処理をするために用いるワーキングテーブルの作成等が考えられると思います。特に、クエリなどで処理したデータを保存しておき、別の処理に用いる場合など、処理が複雑になるほどワーキングテーブルの存在は重宝するかと思います。
DAOによるテーブル作成については、以下の書籍でも紹介されていますので、ご参考になさってください。
スポンサーリンク
コメント