DAO基礎テクニック──VBAでAccessデータベースの「テーブル/フィールドの作成、削除」を実践Access VBAで学ぶ初心者のためのデータベース/SQL超入門(10)(3/4 ページ)

» 2016年02月26日 05時00分 公開
[薬師寺国安PROJECT KySS]

「フィールド追加」機能を配置する

 次は「フィールドを追加」する機能を配置しよう。

 フォーム画面を表示し、「テーブル作成フォーム」を選択して、マウスの右クリックで表示されるメニューから「デザインビュー」を選択する。フォームのデザイン画面が表示されるので、図1のフォーム内に、追加するフィールドを入力するための「テキストボックス」と「ボタン」を1セット追加する(図6)。

photo 図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のコードは、以下のように記述してある。

  • 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)。

photo 図7 指定したフィールド「在庫」が追加された

ワンポイント

 これまでのコードには、エラー処理を設けていない。同じ「テーブル名」や「フィールド名」が存在したまま「追加ボタン」をクリックすると、エラーが発生することには注意してほしい。

 ちなみに、エラー処理は、

On Error GoTo エラー
エラー:
 Msgbox(“エラーです。”)
 Exit Sub

 の処理で実装できるので、慣れてきたら各自で試してほしい(実装の仕方は後述する)。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。