とあるプログラマーの覚書

Access編:他のMDBファイルからデータのみを移行する方法

本日もAccessに関するトピックになります。

Accessは、ファイル内(拡張子mdb)にテーブル、レポート、フォーム等のデータを保持しています。
実際に既に客先で使われているバージョンがあって、それを元に機能追加や不具合を修正して、作業完了後に客先の環境で使われているMDBを置き換える作業が発生する、という事があろうかと思います。

このような場合の移行手順としては、基本的には以下のいずれかの考え方になるかと思います。
A.元々の環境で使われていたMDBファイルからデータをインポートする。
B.修正後のMDBファイルから修正前のMDBファイルに向かって、修正したオブジェクトをエクスポートする。

移行手順は、修正した内容やシステムの運用方法等の状況によると思います。

例えば、修正した内容がテーブル以外であれば、上記の「A」「B」のどちらのやり方でも、おそらく問題無いと思います。
「A」も「B」も、どちらからどちらにエクスポートするのかの違いです。
修正したオブジェクトが少なければ「B」の方が楽でしょうし、使用しているテーブル数が少なければ「A」の方が楽でしょう。

但し、既存のテーブル定義を直した場合は注意が必要です。(そのテーブルが、作業用のワークテーブル等、レコードを移行させる必要が無いのであればいいですが、マスタテーブル等、レコードの移行が必要なテーブルであれば。)

Accessのテーブルのエクスポート(別MDBから別MDBへ)の場合、レコードのみのエクスポートは出来ず、テーブル構成毎エクスポートする事になります。
その為、修正前⇒修正後のエクスポートだと、テーブル構成が修正前に戻ってしまいますし、修正後⇒修正前のエクスポートだと、レコードが引き継がれません。

修正前のMDBを開いて、データを移行させたいテーブルをExcelにエクスポートする⇒修正後のMDBを開いて、データを移行させたいテーブルへExcelからインポートする、という手順でも可能ですが、移行させたいテーブルが多ければ、結構大変です。
大変なのはいいとしても、人の手が加わるのでミスが心配ですよね。

その場合に取る手段として、個人的におススメなのが、データ移行用モジュールの作成です。
前回の記事で書いた「Access編:テーブルやカラム名のネーミングについて」で取り上げたSQLのINSERT SELECTを使って移行します。
ちなみに、Accessで、他のMDBファイルのテーブルのレコードを読み出す(SELECT文)ときのSQLは、以下のような形を取ります。


SELECT * FROM テーブルA IN ‘C:\旧.mdb’


「IN」の後ろに、参照したいMDBファイルの絶対パスを指定すればOKです。
これを応用して、INSERT SELECT文を記述します。
具体的には下記のようなイメージですね。


INSERT INTO テーブル1 (カラム1,カラム2,…,カラムN)
 SELECT カラム1,カラム2,…,カラムN FROM テーブル2
  IN ‘C:\旧.mdb’;


全ての列を意味する「*」を使うと、移行元と移行前でカラムの並びや数が違う場合にはエラーになってしまうので、カラム名まで指定してあげるとよいでしょう。
また、移行元と移行前に共通しているカラムだけを指定しましょう。
移行前には存在しないカラムに関しては、あらかじめデフォルト値を指定しておく等の対処は行っておきましょう。(これはAccessに関わらず、データベースを扱うシステムであればどのシステムでも同じですが。)

しかし、Accessは、新規でシステムを作るのはいいかもしれないですが、他の誰かが作ったものをカスタマイズしたりするのは大変ですね。
今回は以上です。


スポンサーリンク

URL :
TRACKBACK URL :

Leave a Reply

*
*
* (公開されません)

*

Return Top