我正在寻找一种将 .mdb(访问)文件更改为 .csv(逗号分隔文件)的免费方法。有什么想法吗?
编辑:
我需要能够转换大量的.mdb 文件...因此,自动化的东西会很好。
答案1
答案2
MS Access 数据库文件是完整数据库的容器,包括架构、索引和表数据。.csv 文件应该是单个数据库表的转储,才具有合理用途。您通常不需要某种文件类型到文件类型的转换器,而是需要一种从 Access 数据库中提取 .csv 文件中所需信息的方法。
如果您有 MS Access,您只需在 Access 中打开数据库,右键单击每个表并选择“导出”。在文件对话框中,您可以选择导出格式,其中包括纯文本格式,例如 .csv。如果您的 Access 安装或版本不直接支持导出为纯文本格式,您可以按照 rjmccann101 的建议,先导出到 MS Excel 工作簿,这样即使使用最旧版本的 Access 也可以正常工作。或者,您可以对表指定查询,然后以相同的方式导出其结果。
除此之外,Access 数据文件是自包含的数据库。如果您手头没有 MS Access 副本,而只有 .mdb 文件,则可以连接到它并使用 SQL 查询表数据,例如使用简单的 Perl 脚本:
#/usr/bin/perl
use strict;
use warnings;
my $dbh = DBI->connect('dbi:ODBC:driver=microsoft access driver (*.mdb); dbq=path_and_name_of_your.mdb');
my $sql = "select * from table_name";
my $sth = $dbh->prepare( $sth );
while( my @row = $sth->fetchrow_array()) {
print( join( ',', @row ) . "\n" );
}
$sth->finish()
;
$dbh->disconnect()
;
答案3
- 对仅包含您想要的列的表进行查询,然后保存。
- 选择查询,然后转到文件->导出(选择另存为“文本 *.txt、*cvs 等”)并按照提示进行操作
答案4
对于批量处理我推荐使用这样的脚本(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 环境中工作,只需对路径符号进行轻微调整即可。