ファイル拡張子「mdb」は Microsoftの古いAccessが取り扱うデータベースのファイルです。
手元に古いAccessが無く、ubuntuやraspberry piにてファイルを取り扱う方法です。
Webを検索すると Windows対応のアプリケーションや、JAVAを利用したアプリなどがありましが、残念ながら手元の環境ではどちらも動作しませんでした。
今回はLinux対応の「mdbtools」を使ってMDBファイルをsqliteにコンバートしてみました。
USER@raspberrypi:~ $ sudo apt install mdbtools
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libgnutls-dane0 liblockfile-bin liblockfile1 libunbound8
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
libmdb2 libmdbsql2
Suggested packages:
mdbtools-doc
The following NEW packages will be installed:
libmdb2 libmdbsql2 mdbtools
0 upgraded, 3 newly installed, 0 to remove and 139 not upgraded.
Need to get 147 kB of archives.
After this operation, 376 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ftp.udx.icscoe.jp/Linux/raspbian/raspbian buster/main armhf libmdb2 armhf 0.7.1-6 [55.2 kB]
Get:2 http://ftp.udx.icscoe.jp/Linux/raspbian/raspbian buster/main armhf libmdbsql2 armhf 0.7.1-6 [37.9 kB]
Get:3 http://ftp.udx.icscoe.jp/Linux/raspbian/raspbian buster/main armhf mdbtools armhf 0.7.1-6 [54.1 kB]
Fetched 147 kB in 3s (43.0 kB/s)
Selecting previously unselected package libmdb2:armhf.
(Reading database ... 140158 files and directories currently installed.)
Preparing to unpack .../libmdb2_0.7.1-6_armhf.deb ...
Unpacking libmdb2:armhf (0.7.1-6) ...
Selecting previously unselected package libmdbsql2:armhf.
Preparing to unpack .../libmdbsql2_0.7.1-6_armhf.deb ...
Unpacking libmdbsql2:armhf (0.7.1-6) ...
Selecting previously unselected package mdbtools.
Preparing to unpack .../mdbtools_0.7.1-6_armhf.deb ...
Unpacking mdbtools (0.7.1-6) ...
Setting up libmdb2:armhf (0.7.1-6) ...
Setting up libmdbsql2:armhf (0.7.1-6) ...
Setting up mdbtools (0.7.1-6) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for libc-bin (2.28-10+rpi1) ...
USER@raspberrypi:~ $
mdbファイルを取り扱う方法
# バージョンの表示
$ mdb-ver ./test.mdb
JET4
# テーブルの一覧
$ mdb-tables -1 ./test.mdb
T_Master
T_DayCount
T_NG_FREQ
# テーブルの構造
$ mdb-schema ./test.mdb
-- ----------------------------------------------------------
-- MDB Tools - A library for reading MS Access database files
-- Copyright (C) 2000-2011 Brian Bruns and others.
-- Files in libmdb are licensed under LGPL and the utilities under
-- the GPL, see COPYING.LIB and COPYING files respectively.
-- Check out http://mdbtools.sourceforge.net
-- ----------------------------------------------------------
-- That file uses encoding UTF-8
CREATE TABLE [T_Master]
(
[RcvDate] DateTime NOT NULL,
[Event] Long Integer NOT NULL,
[Freq] Text (30) NOT NULL,
[SIG] Long Integer NOT NULL,
[Remarks] Text (510),
[Seq] Long Integer NOT NULL,
[Comment] Memo/Hyperlink (255)
);
CREATE TABLE [T_DayCount]
(
[Day] DateTime,
[Count] Long Integer
);
CREATE TABLE [T_NG_FREQ]
(
[NG_FREQ] Text (100),
[Remarks] Text (100)
);
テーブルの内容をCSVに出力する。
mdb-export -D 日付書式 ファイル名 テーブル名 > 出力先ファイル名
$ mdb-export -D "%Y-%m-%d %H:%M:%S" ./ar5000.mdb T_Master > T_Master.CSV
テーブルの内容をSQL文で出力する(sqlite向け)。
mdb-export -I sqlite ファイル名 テーブル名 > 出力先ファイル名
$ mdb-export -I sqlite ./ar5000.mdb T_Master > T_Master.SQL
参考)mdb-export –help
$ mdb-export --help
mdb-export: invalid option -- '-'
mdb-export: invalid option -- 'h'
mdb-export: invalid option -- 'e'
mdb-export: invalid option -- 'l'
mdb-export: invalid option -- 'p'
Usage: mdb-export [options] <file> <table>
where options are:
-H suppress header row
-Q don't wrap text-like fields in quotes
-d <delimiter> specify a column delimiter
-R <delimiter> specify a row delimiter
-I <backend> INSERT statements (instead of CSV)
-D <format> set the date format (see strftime(3) for details)
-q <char> Use <char> to wrap text-like fields. Default is ".
-X <char> Use <char> to escape quoted characters within a field. Default is doubling.
-N <namespace> Prefix identifiers with namespace
-b strip|raw|octal Binary export mode.
mdb-export is a utility program distributed with MDB Tools.
参考にさせていただきました。有益な情報をありがとうございます。