DAO基礎テクニック──VBAでAccessデータベースの「テーブル/フィールドの作成、削除」を実践:Access VBAで学ぶ初心者のためのデータベース/SQL超入門(10)(3/4 ページ)
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。今回は、VBAでAccessフォームにデータベースの「テーブル/フィールドの作成、削除」機能を配置するテクニックをお伝えする。
「フィールド追加」機能を配置する
次は「フィールドを追加」する機能を配置しよう。
フォーム画面を表示し、「テーブル作成フォーム」を選択して、マウスの右クリックで表示されるメニューから「デザインビュー」を選択する。フォームのデザイン画面が表示されるので、図1のフォーム内に、追加するフィールドを入力するための「テキストボックス」と「ボタン」を1セット追加する(図6)。
コントロールの配置と設定項目は、これまでとほぼ同じだ。「テキストボックス」の左に表示されるラベルを選択し、プロパティシートより標題は「追加するフィールド」、フォント名は「Meiryo UI」、フォントサイズは「12」、フォント太さは「太字」を指定する。続いて「テキストボックス」本体の書式も、フォントサイズ「14」、フォント名とフォント太さはラベルと同じ書式に設定。「その他」タブの名前には「フィールドテキストボックス」と指定する。
続いて「ボタン」コントロールの書式も、フォント名、フォントサイズ、フォント太さは前述したテキストボックスと同じ設定にしてほしい。表題は「追加」に、「その他」タブの名前には「追加ボタン」と指定する。
図6で配置するコントロールは以下の通りだ。
コントロールの種類 | 名前 |
---|---|
テキストボックス | フィールドテキストボックス |
ボタン | 追加ボタン |
VBEで「フィールド追加」のためのコードを記述する
これまでと同様に、「フィールド追加」のためのコードを記述していく。
「作成ボタン」を選択した状態で、プロパティシート→「イベント」タブをクリックする。「▼」アイコンで[イベントプロシージャ]を選択し、「…」アイコンをクリックするとVBEが開き、
Private Sub 追加ボタン_Click()
End Sub
のコードが生成される。これをリスト2のコードに書き換える。
Private Sub 追加ボタン_Click() Dim db As DAO.Database Dim myTable As DAO.TableDef Dim myField As DAO.Field Dim myFieldName As String If IsNull(フィールドテキストボックス.Value) Then MsgBox ("フィード名を入力してください。") Exit Sub End If Set db = CurrentDb Set myTable = db.TableDefs("商品管理") myFieldName = フィールドテキストボックス.Value Set myField = myTable.CreateField(Name:=myFieldName, Type:=dbText, Size:=50) myTable.Fields.Append Object:=myField Set myTable = Nothing db.Close Set db = Nothing MsgBox (フィールドテキストボックス.Value & "フィールドを追加しました。") End Sub
リスト2のコードは、以下のように記述してある。
- 2〜3行目:Database型の変数dbを宣言する。TableDef型の変数myTableを宣言する。TableDefは、個々のテーブルの定義情報を格納しているクラスだ。
- 4〜5行目:Field型の変数myFieldを宣言する。文字列型の変数myFieldNameを宣言する。
- 7〜10行目:フィールド名が未入力だったら、警告メッセージを表示して処理を抜ける、ための記述を入れる。
- 12行目:カレントデータベースを参照するdbオブジェクトを作成する。
- 13行目:Set myTable=db.TableDefs(“商品管理”)コレクションで、「商品管理」テーブルを参照するオブジェクト変数myTableを作成する。TableDefsコレクションには、データベースに格納されている全てのTableDefオブジェクトが含まれる。
- 15行目:変数myFieldNameに「フィールドテキストボックス」に入力された値を格納する。
- 17行目:CreateFieldメソッドで、指定した名前のフィールドを作成し、オブジェクト変数myFieldに代入する。書式は下記の通り。今回は「名前付き引数」で指定している。各引数は省略可能。ここでは、Nameに「フィールドテキストボックス」の値を格納しているmyFieldName変数の値を指定し、Typeには「dbText(テキスト型)」、Sizeには「50」と指定している。
TableDef.CreateField(Name:=一意のフィールド名,Type:=表1の値,Size:=最大サイズをバイト単位で指定(Integer))
- 18行目:Appendメソッドでフィールドをテーブルに追加する。
- 20〜22行目Tableを全ての関連付けから解放する。Databaseを閉じ、全ての関連付けから解放する。
- 23行目:フィールドを作成した旨のメッセージを表示する。
「フィールド作成」機能の動作を確認する
「フォームビュー」に移って、正しく動作するかを確認しよう。なお、「商品管理」テーブルが開かれているとエラーになるので、実行前にこのテーブルは右クリックメニューなどで閉じておいてほしい。
追加するフィールド欄に「在庫」と入力して、「追加」ボタンを押す。「フィールド」追加のメッセージが表示された後、テーブルに「在庫」という名前のフィールドが新たに追加された(図7)。
ワンポイント
これまでのコードには、エラー処理を設けていない。同じ「テーブル名」や「フィールド名」が存在したまま「追加ボタン」をクリックすると、エラーが発生することには注意してほしい。
ちなみに、エラー処理は、
On Error GoTo エラー エラー: Msgbox(“エラーです。”) Exit Sub
の処理で実装できるので、慣れてきたら各自で試してほしい(実装の仕方は後述する)。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう - Access VBAでデータ入力フォームを作り、各コントロールを追加するためのデザインビューの使い方
今回は、テーブルを基にデータ入力フォームを作成し、ラベル、テキストボックス、コンボボックス、ボタンリストボックスを追加する手順を解説する - SQLとはどういう言語か
- Accessを使うなら最低限知っておきたいSQL文を使ったさまざまな種類のクエリ操作の基本
今回は、テーブルに「SELECT文」や「BETWEEN演算子」などのSQLを入力し、データベースに蓄積したレコードを抽出する方法を解説する - 初心者でも図解で分かる! VBEの基本的な使い方とVBAプログラムの基礎文法
- Accessでフォームからデータを追加し、Excelのシートにエクスポートする
- SQLとはどういう言語か
- 数値判定、乱数発生、数値の丸めなど、数値に関する4つの関数の使い方
- 制御文で道案内
- 使うほどに良さが分かる正規表現
- .NET Frameworkがサポートする正規表現クラスを徹底活用する(前編)
- .NET Frameworkがサポートする正規表現クラスを徹底活用する(後編)