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に戻る