ACCESSのデータ格納の基本単位はテーブルです。
ACCESSの画面操作でテーブルを作成するのは簡単ですが、VBAのプログラム内で新規テーブルを作成したい場合はどうすればよいでしょうか。ACCESS VBAの基本機能ではテーブルを作成する機能がありません。
しかし、SQLを使用することでVBAから新規のテーブル作成が可能です。
今回は、SQLを使ってテーブルを作成する方法についてご紹介します。
こんにちは。はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。この記事ではACCESSでのVBAの使い方をご紹介していきます。
目次
1 VBAでのテーブル操作2 SQLを使った新規テーブル作成プログラム3 既存のテーブルから新しいテーブルを作成するプログラムVBAでのテーブル操作VBAを使いこなしてくると、DLookup関数やDsum関数でVBA側からテーブルの値を取得することも多くなるでしょう。そうなると逆にVBAからテーブルを新しく作成するというケースも出てきます。
しかし、VBAに標準で用意された関数では、テーブルから値を取得したり、クエリやフォームの操作はできるものの、テーブルを作成できる関数がありません、
VBAから直接テーブルを操作するためには、SQLというデータベース言語の利用が必要になります。
SQLを使うと、レコードの新規作成、更新、抽出、削除、グループ化など様々な操作ができます。
Microsoft SQL ServerやOracleなど、多くのデータベースソフトウェアでもサポートされており、グローバルで一般的なデータベース操作言語と言えます。今回はADOとSQLを使ってテーブル作成をします。
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は日付/時刻型を指定します。
また、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 」でメッセージ表示を元に戻しています。
以上、テーブルを作成する方法について紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。
FacebookXHatenaPocket関連記事ACCESS VBEのフォント設定方法 2024年10月10日ACCESS VBA DoCmd.ApplyFilterの使い方 2024年10月8日ACCESS VBA フォーム名を変数で指定する方法 2024年9月26日ACCESS VBA レポート起動時イベントの発生する順番 2024年9月17日ACCESS VBA フォームのボタンからモジュールを実行する方法 2024年9月6日ACCESS VBA 標準モジュールとは 2024年8月25日ACCESS VBA Privateプロシージャとは 2024年8月20日ACCESS VBA Publicプロシージャとは 2024年8月19日ACCESS VBA ADOでUpdateをする際の2つの記述方法 2024年8月14日ACCESS VBA Functionプロシージャとは 2024年8月13日