MDB tools SETUP
はじめに・・・
 マイクロソフトアクセス(以下アクセス)をデータベースにしてアクセスやマイクロソフトエクセル(以下エクセル)を
使ってデータを処理されている方も多いと思います。
多くの人は、PostgreSQLをベースにアクセスやエクセルでデータを取り出し操作されていると思いますが、今回はアクセスの
データをPostgreSQLに取り込んでみようと思います。
よくは解らないのですが、PostgreSQLをODBCでエクセルのピポットテーブルで取り込むときに約10万件を超えると非常に
負荷がかかるらしく、更新がとても遅いのです。しかし、アクセスのMDBファイルだとさほど遅くありません。Apache2+PHP
では、速度はそんなに変わりませんでした。実務で使っているので、原因を特定する暇もなくPostgreSQLからアクセスに
移行してしまいました。
しかし、どこからでもデータが確認できるApache2+PostgreSQL+PHPの環境はやはり捨てがたいので、何とかアクセスの
データをPostgreSQLにバックアップしWebで確認するためにやってみました。

環境
OS	Vine Linux 4.2
Program		rpm	postgresql-libs-8.1.5-0vl0
		prm	postgresql-server-8.1.5-0vl0
		prm	postgresql-8.1.5-0vl0
		rpm	pkgconfig-0.20-0vl3
		rpm	libtool
		rpm	libiconv(必要か不要かは不明)
		rpm	glib2-2.12.7-0vl1
		rpm	glib2-devel-2.12.7-0vl1
		rpm	gcc-c++-3.3.6-0vl7
		rpm	byacc-1.9-22vl3
		rpm	flex-2.5.4a-30vl2
		rpm	unixODBC
		rpm	unixODBC-devel
		soucce	mdbtools-0.6pre1

インストール
mdbtoolsをダウンロードする

サイト	http://mdbtools.sourceforge.net/
DownLoad	http://prdownloads.sourceforge.net/mdbtools/mdbtools-0.6pre1.tar.gz

#cd /usr/local/src
#wget http://prdownloads.sourceforge.net/mdbtools/mdbtools-0.6pre1.tar.gz

展開
#tar zxvf mdbtools-0.6pre1.tar.gz

データ加工
read_historyとwrite_historyはダミー処理を行います。
	#cd ./mdbtools-0.6pre1/src/util		(/usr/local/src/mdbtools-0.6pre1/src/util)
	#vi mdb-sql.c
		void add_history(char *s)
		{
		}
		void read_history (char *s) {}		//<- 追加
		void write_history (char *s) {}		//<- 追加

※シングルクォーンテーション加工
text,memo,dateの出力がダブルクォンテーションマークでくくられます。
シングルクォンテーションマークに変更したいときに使ってみてください。
今回は、mdb-exportの変更を記します。(2008/02/24 追記)
	#cd ./mdbtools-0.6pre1/src/util		(/usr/local/src/mdbtools-0.6pre1/src/util)
	#vi mdb-export.c
		void
	print_col(gchar *col_val, int quote_text, int col_type)
	{
	        gchar *s;

	        if (quote_text && is_text_type(col_type)) {
	//              fprintf(stdout,"\"");      // Orignal
	                fprintf(stdout,"\'");
	                for (s=col_val;*s;s++) {
	                        if (*s=='"') fprintf(stdout,"\"\"");
	                        else fprintf(stdout,"%c",*s);
	                }
	                fprintf(stdout,"\'");
	//              fprintf(stdout,"\"");      // Orignal
	        } else {
	                fprintf(stdout,"%s",col_val);
	        }
	}

コンパイルとインストール
#./configure
#make
#make install

シンボリックファイルを作る
libmdb0.0.0ファイルが必要なようだが、パスが通っていないところにできるようなのでシンボリックファイルを作り、
ファイルをつなぎます。
#cd /lib
#ln -s /usr/local/lib/libmdb.0.0.0 libmdb.0

確認
Access2000で作られたファイルのバージョンを確認する
#mdb-ver test.mdb
JET4

と、表示されれば動作確認完了です。

使い方
MDBファイルからテーブル単位でデータを取り出す。
アクセス側
	ファイル名:test.mdb
	テーブル名:t_main
PostgreSQL側
	データベース名:pgsql_db
	テーブル名:pgsql_main

※事前にPostgreSQLのテーブルを作っておく必要があります。

直接データベースにデータを送る場合
#mdb-export -I -R ';' test.mdb t_main | nkf -e | sed -e "s/\"/\'/g" | psql pgsql_db
(シングルクォンテーション加工した場合)
#mdb-export -I -R ';' test.mdb t_main | nkf -e | psql pgsql_db

一度データをファイル化
#mdb-export -I -R ';' test.mdb t_main | nkf -e | sed -e "s/\"/\'/g" > file.csv
(シングルクォンテーション加工した場合)
#mdb-export -I -R ';' test.mdb t_main | nkf -e > file.csv

他にも、mdbtoolsにはコマンドはたくさんあるのですが、今わかっているのはこの一つだけです。(泣)
mdb-exportも出力データがダブルクォンテーションマークで出力されてしまうので、sedを使ってシングルククォンテー
ションマークに変更したり、SHIFT-JISで出力されるのでEUC-JPに変更したりとまだまだ、調べることは山積です・・・。
また、解りましたら加筆いたします。。。。

<<参考サイト>>
MDB Tools Unlocking Your Data
Vine Evo内glib2インストール
OS dir

thanks!
Vine Linux ML & PostgreSQL ML

2008/02/14 記述
2008/02/23 gcc-c++-3.3.6-0vl7/byacc-1.9-22vl3/flex-2.5.4a-30vl2 の必要性があったので追記
2008/02/24 ダブルクォンテーションマークでくくられる文字列をシングルクォンテーションに変更

Let's PC の Topに戻る
ホームページのTopに戻る