2014年2月23日

Accessで既存テーブルにフィールドを追加する方法

 Accessのシステムを作るときは通常(絶対ともいう)、アプリケーション部分とデータ部のファイルは分けて作ると思います。
 で、リリースしたアプリケーションがバグっていたり、機能強化をする時にテーブルに列を追加したりすると思いますのでその方法をメモ。そして解説。


  1. Dim def As DAO.TableDef
  2. Dim fld As DAO.Field
  3. Dim prp As DAO.Property

  4. Set def = CurrentDb.TableDefs("なんとかテーブル")
  5. With def
  6.     .Fields.Append .CreateField("メモ", dbMemo)
  7.     Set fld = .CreateField("一括更新", dbBoolean)
  8.     .Fields.Append fld
  9.     Set prp = fld.CreateProperty("Format", dbText, "Yes/No")
  10.     fld.Properties.Append prp
  11.     Set prp = fld.CreateProperty("DisplayControl", dbInteger, acCheckBox)
  12.     fld.Properties.Append prp
  13. End With


仕様

  • 既存のテーブルに対して"メモ"フィールド(メモ型)、一括更新フィールド(ブール型)の列を追加する。
  • ブール型の列の表示は、チェックボックスにする

解説
  • 5行目:変更するテーブルのTableDefオブジェクトを取得する。
  • 7行目:新しいフィールドを追加する
    TableDefオブジェクトには、CreateFieldというメソッドでフィールドオブジェクトを作成し、FieldsプロパティのAppedメソッドで追加する。
    列を追加するだけだったらこれだけで終わり。
  • 8~13行目:フィールドの追加とそのフィールドのフォーマットや表示形式を指定する。
  • 8~9行目:7行目と同様ですが、新しく追加するフィールドに対してプロパティを追加したりするので変数に格納する。
  • 10行目:テーブルデザインの書式をプロパティオブジェクトに定義します。
    ※他にも表題、規定値、入力規則、エラーメッセージ、インデックス、文字配置などがありますね。
    引数説明
    第1引数:書式の英語名を指定する。書式の場合は、Format。
    第2引数:プロパティの値のデータ型を指定する。第3引数には、"Yes/No"という引数を指定するので、dbText。
    第3引数:設定する値を指定する。テーブルデザインで選択する値をそのまま記載。
  • 11行目:できたプロパティオブジェクトを8行目で作成済みのオブジェクトのPropertiesプロパティにAppendメソッドで追加します。
  • 12~13行目:テーブルをデータシートビューで見た時に、チェックボックスになるようにするための設定です。
  • 12行目:10行目のルックアップタブ内の値を指定します。
    第1引数:書式の英語名を指定する。書式の場合は、Format。
    第2引数:プロパティの値のデータ型を指定する。第3引数には、acCheckBoxという整数型の定数を引数を指するので、dbInteger。
    第3引数:チェックボックスにシたいので、acCheckBoxを指定する。
    ※他にも、acTextBox、acListBox、acComboBoxというのが有ります。
これだけわかれば、VBAを使ってテーブルのレイアウトを自由に変更することができるようになると思います。
 アプリケーションを変更したいだけなのに、既存データを新しいところにインポートするとかいうわけのわからない作業はしなくても良くなります。

※チョット前に引き継いだAccessのアプリケーションがそんなのでした。
テーブルのデータをエクスポートやインポートで移行するならまだしも、CSVファイルに出力して移行するというアホな設計でした。

0 件のコメント:

コメントを投稿