Você pode usar mdbtools para exportar o arquivo do Access para o CSV. Esta postagem do blog aborda como você pode automatizá-las usando o Python
Eu estou procurando uma maneira livre de alterar um arquivo .mdb (acesso) para um .csv (arquivo delimitado por vírgula). alguma ideia lá fora?
EDITAR:
Eu preciso ser capaz de converter uma grande quantidade de arquivos .mdb ... Então, algo automatizado seria bom.
Você pode usar mdbtools para exportar o arquivo do Access para o CSV. Esta postagem do blog aborda como você pode automatizá-las usando o Python
Os arquivos de banco de dados do MS Access são contêineres de bancos de dados completos, incluindo esquemas, índices e dados da tabela. Um arquivo .csv deve ser um despejo de uma única tabela de banco de dados para ser de qualquer uso sã. Geralmente, você não deve querer uma espécie de conversor filetype-to-filetype, mas sim uma maneira de extrair as informações do banco de dados do Access que deseja em um arquivo .csv.
Se você tiver o MS Access disponível, basta abrir o banco de dados no Access e clicar com o botão direito do mouse em cada tabela e escolher "Exportar". Na caixa de diálogo de arquivo, você pode escolher o formato para o qual exportar, que incluirá formatos de texto simples, como .csv. Caso sua instalação ou versão do Access não ofereça suporte diretamente à exportação para formatos de texto sem formatação, você pode seguir o conselho do rjmccann101 e exportar primeiro para uma pasta de trabalho do MS Excel que funcionará mesmo com as versões mais antigas do Access. Como alternativa, você pode especificar consultas em suas tabelas e exportar seus resultados da mesma maneira.
Além disso, os arquivos de dados do Access são bancos de dados independentes. Se você não tiver uma cópia do MS Access disponível, mas somente o arquivo .mdb, poderá se conectar a ela e consultar os dados da tabela usando SQL, por exemplo, usando um script Perl simples:
#/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()
;
Confira este tópico do StackOverflow :
- Make a query on the table with only the columns you want, and save it.
- Select the query, and then got to File->Export (Select Save As "text *.txt, *cvs, etc.") and follow the prompts
Eu só tenho o Access 2007 disponível aqui, mas Exportar para o Excel e salvar como CSV deve funcionar.
Para processamento em massa, eu recomendaria um script como este (exemplo em 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 )
Isso "converterá" cada arquivo .mdb em um grupo de arquivos .csv que estão sendo nomeados após o contêiner de banco de dados (o arquivo .mdb) e o nome da tabela. Se você não precisa de valores reais separados por vírgula, mas sim pipe, ponto-e-vírgula ou qualquer dado separado, apenas edite a declaração de impressão de acordo.
O exemplo requer que todos os seus arquivos .mdb residam no mesmo diretório que é codificado na variável $ dir, mas isso pode ser facilmente alterado para que você possa entregar nomes de diretórios ou nomes de arquivos .mdb individuais no comando linha.
Note que o exemplo não é robusto ou à prova de falhas de forma alguma, deixei de fora qualquer detecção e correção de erros por questões de legibilidade.
Observe também que existem implementações Perl no Windows, também (ActiveState Perl, por exemplo) e que o exemplo deve funcionar em um ambiente Windows com apenas pequenas adaptações à notação de caminho.
Você pode querer verificar uma ferramenta que eu escrevi chamada PlaneDisaster.NET . Não exportará os arquivos em massa, mas seu código aberto, e se você souber C #, será um bom ponto de partida para um programa que faça isso.