#604 他のデータベース内のテーブルにフィールドを追加する方法 VBA

一般的に、アプリケーションとしてデータベースを作ったり利用している範囲ではそのようなことはあまりないかもしれませんが、たとえば、運用が始まって複数のエンドユーザーにデータベースを配布したあと、バージョンアップ等の理由でテーブル構造を変更したいこともあるかもしれません。そのようなとき、ちょっとしたフィールド追加であっても、1台ごとにそのようなデザイン変更を行うのは難しい、あるいは面倒なこともあるかもしれません。

そのようなとき、あらかじめバージョンアップ処理用のデータベースを用意しておき、ユーザーがそれを実行するだけで、それまで使っていた既存のレコードも生かしたまま、テーブル構造を変更(フィールド追加)するというプログラムの例です。

ここでは、シンプルな例として、外部のデータベース内にある、既存の「tbl顧客マスタ」というテーブルにいくつかのフィールドを追加しています。
なお、変更対象のデータベースファイルのパスはプログラムに埋め込みとなっていますので、応用する際は、テキストボックスから入力させたり、カレントデータベースと同じフォルダにある指定のデータベース名を取得したりといったことも必要になるかもしれません。

Dim dbs As Database
Dim tdf As TableDef

'対象データベースを開く
Set dbs = OpenDatabase("D:\Database\Database1.accdb")

'対象テーブルの定義を開く
Set tdf = dbs.TableDefs("tbl顧客マスタ")
With tdf
  'FAX番号フィールドを追加
  .Fields.Append .CreateField("FAX番号", dbText, 20)
  '来店数フィールドを追加
  .Fields.Append .CreateField("来店数", dbLong)
  '登録日フィールドを追加
  .Fields.Append .CreateField("登録日", dbDate)
  'その既定値を設定
  .Fields("登録日").DefaultValue = "Date()"
  '備考フィールドを追加
  .Fields.Append .CreateField("備考", dbMemo)
End With
dbs.Close


■実行前のテーブル構造
実行前のテーブル構造
■実行後のテーブル構造
実行後のテーブル構造


なお、ここでは”フィールド追加”という例ですので、「tdf.Fields.Append .CreateField〜〜〜〜」という命令を使っています。CreateFieldでは、最初の引数に「フィールド名」、2番目の引数に次のような「データ型の定数」、テキスト型の場合には3番目の引数にその「サイズ」を指定します。
  • dbBoolean → Yes/No型
  • dbByte → バイト型
  • dbInteger → 整数型
  • dbLong → 長整数型
  • dbSingle → 単精度浮動小数点型
  • dbDouble → 倍精度浮動小数点型
  • dbCurrency → 通貨型
  • dbDate → 日付/時刻型
  • dbText → テキスト型
  • dbMemo → メモ型

また、その命令でフィールドを生成したあと、「.Fields("登録日").DefaultValue = "Date()"」のようなコードを実行することによって、「DefaultValue(既定値)」など、そのフィールドに関するいろいろな属性も合わせて設定することができます。
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved