ACCESS VBA Create Tableでテーブルを作成する方法
ACCESS VBAでテーブルを作成する場合に利用するのがCreate Tableステートメントです。
今回は、ACCESS VBA Create Tableでテーブルを作成する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
VBAでテーブルを作成する方法
VBAを使いこなしてくると、DLookup関数やDsum関数でVBA側からテーブルの値を取得することも多くなるでしょう。
そうなると逆に計算した値や抽出したレコードを元に、VBAでテーブルを新しく作成するというケースも出てきます。
しかし、VBAに標準で用意された関数では、テーブルから値を取得したり、クエリやフォームの操作はできるものの、テーブルを作成でません、
VBAから直接テーブルを操作するためには、SQLというデータベース言語の利用が必要になります。
SQLを使うと、レコードの新規作成、更新、抽出、削除、グループ化など様々な操作ができます。
SQLはMicrosoft SQL ServerやOracleなど、多くのデータベースソフトウェアでもサポートされており、グローバルで一般的なデータベース操作言語と言えます。
今回はSQLのCreate Tableステートメントを使ってテーブル作成をします。
Create Tableステートメント
Create Tableステートメントは以下の構文で利用します。
Create Table テーブル名 ( フィールド1の名前 フィールド1のデータ型 , フィールド2の名前 フィールド2のデータ型 , … )
テーブル名を指定した後はフィールド名とデータ型を連続して指定していきます。
また、主キーにしたいフィールドにはデータ型の指定の後でPRIMARY KEYを付与します。
SQLを使った新規テーブル作成プログラム
では実際に、SQLを使ってテーブルを作成するプログラムを見てみましょう。
DoCmd.RunSQL "CREATE TABLE T_create1 (ID LONG PRIMARY KEY,日付 DATE);"
ACCESSでSQLを使用する場合は、DoCmd.RunSQLメソッドを利用します。
DoCmd.RunSQLのあとの””で囲われた部分が実行されるSQL文です。
テーブルを作成する際には、CREATE TABLEという構文を使用します。
上記の例では、「T_create1」というテーブル名で、フィールドにIDと日付があるテーブルを作成する、という命令をしています。
ID、日付の後にある、LONGやDATEはデータ型を指定しています。
LONGは数値型(長整数型)、DATEは日付/時刻型を指定します。
ACCESSのデータ型については以下の記事にまとめていますので参照ください。
また、PRIMARY KEYは主キー設定の指定になります。
上記のプロシージャを実行すると、下記のテーブルが作成されます。
デザインビューで見ると下記の設定で、指定通りのデータ型になっていることがわかります。
なお、SQL文には他にも以下のような種類の構文があります。
SELECT ・・・ FROM ・・・ | レコードの抽出 |
UPDATE ・・・ SET ・・・ | レコードの更新 |
INSERT ・・・ INTO ・・・ | レコードの追加 |
DELETE ・・・ from ・・・ | レコードの削除 |
既存のテーブルから新しいテーブルを作成するプログラム
上記で説明したのは、最も基礎的なテーブル作成の方法ですが、ACCESSを使用していてVBAでテーブルを作成する際は、この方法はあまり使用しません。
ACCESS自体がデータベースソフトウェアなので、既存のテーブルやクエリを基に新しいテーブルを作成するケースのほうが多いのです。
そこで、既存のテーブルを基に新しいテーブルを複製する方法もご説明します。
DoCmd.RunSQL "SELECT * INTO T_create2 FROM TRN_売上;"
こちらも同様に DoCmd.RunSQL を使用します。
SQL文の内容は、TRN_売上テーブルから( FROM TRN_売上 )、すべてのフィールドを選択し( SELECT * )、T_create2テーブルを作成する( INTO T_create2 )というものです。
この命令を実行するとテーブルが複製されます。
もし、テーブルのフィールドフォーマットのみを使用したいので、レコードは不要という場合には、上記の後に
DoCmd.RunSQL "DELETE* from T_create2;"
と、DELETEでレコードを削除する命令を実行すれば問題ありません。
なお、こうしたレコード操作を行うと、実行時にACCESSの画面上では下記のような確認メッセージが表示されます。
VBAで自動実行している際は、ユーザーにこうした画面を見せたくないというケースも多いでしょう。
そんな時はDoCmd.SetWarningsを使用することでメッセージの表示を回避できます。
ここまでの一連の流れをまとめてコードで記載すると下記のようになります。
DoCmd.SetWarnings False
DoCmd.RunSQL "SELECT * INTO T_create2 FROM TRN_売上;"
DoCmd.RunSQL "DELETE* from T_create2;"
DoCmd.SetWarnings True
最初の「 DoCmd.SetWarnings False 」でメッセージ表示をしないようにしたうえで、SQLによるテーブル操作を行い、最後に「 DoCmd.SetWarnings True 」でメッセージ表示を元に戻しています。
以上、Create Tableでテーブルを作成する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。