Для массовой обработки я бы порекомендовал такой скрипт (пример на Perl):
#/usr/bin/perl
use strict;
use warnings;
use DBI;
my $dir = "/your/path/to/mdb/files";
opendir( DIR, "$dir" );
while( readdir( DIR )) {
my $filename = $_;
next unless( $filename =~ /.mdb$/ ); # skip non-Access entries
my $dbh = DBI->connect('dbi:ODBC:driver=microsoft access driver (*.mdb); dbq=$dir/$filename');
# This select will retrieve all Access objects that are Tables and not system tables
my $sql_outer = 'select name from MSysObjects where type = 1 and name not like "MSys*"';
my $sth_outer = $dbh->prepare( $sql_outer );
while( my @table_name = fetchrow_array( $sth_outer )) {
open( OUT, ">", "$dir/$filename.$table_name.csv" );
$sql_inner = "select * from $table_name";
$sth_inner = $dbh->prepare( $sql_inner );
while( my @row = fetchrow_array( $sth_inner )) {
print( OUT join( ',', @row ) . "\n" );
}
sth_inner->finish();
close( OUT );
}
$sth->outer->finish();
$dbh->disconnect();
}
closedir( DIR )
Это "преобразует" каждый файл .mdb в группу файлов .csv, названных по имени их контейнера базы данных (файл .mdb) и имени таблицы. Если вам не нужны фактические значения, разделенные запятыми, а, скорее, труба, точка с запятой или любые другие разделенные данные, просто отредактируйте оператор печати соответствующим образом.
В примере требуется, чтобы все ваши файлы .mdb находились в одном каталоге, который жестко задан в переменной $ dir, но это можно легко изменить, чтобы вы могли передавать имена каталогов или отдельные имена файлов .mdb в командной строке.
Обратите внимание, что пример не является надежным или отказоустойчивым в любом случае, я упустил любое обнаружение и исправление ошибок для удобства чтения.
Также обратите внимание, что в Windows также есть реализации Perl (например, ActiveState Perl), и этот пример должен работать в среде Windows с незначительными изменениями в обозначении пути.