¿Convertir del acceso a un archivo delimitado por comas?

3

Estoy buscando una forma gratuita de cambiar un archivo .mdb (acceso) a un .csv (archivo delimitado por comas). ¿Alguna idea por ahí?

EDITAR:

Necesito poder convertir una gran cantidad de archivos .mdb ... Así que algo automatizado sería bueno.

Richard
fuente
¿Qué versión de acceso estás usando?
JNK
acceda a 2007. pero no estoy seguro con qué versión se crearon los archivos.
Richard

Respuestas:

4

Puedes usar mdbtools para exportar el archivo de acceso a CSV. Este blogpost cubre cómo puedes automatizarlos usando Python

Sathyajith Bhat
fuente
Genial, ya hay una solución lista para esto. Gracias por el enlace, no estaba al tanto de eso todavía.
Olfan
2

Los archivos de la base de datos de MS Access son contenedores de bases de datos completas que incluyen esquemas, índices y datos de tablas. Un archivo .csv debe ser un volcado de una sola tabla de base de datos para ser de uso razonable. Por lo general, no debería querer una especie de convertidor de tipo de archivo a tipo de archivo, sino una forma de extraer la información de la base de datos de Access que desea en un archivo .csv.

Si tiene MS Access disponible, puede abrir la base de datos en Access, hacer clic con el botón derecho en cada tabla y seleccionar "Exportar". En el cuadro de diálogo de archivo puede elegir el formato para exportar, que incluirá formatos de texto sin formato, como .csv. En caso de que su instalación o versión de Access no admita directamente la exportación a formatos de texto sin formato, puede seguir los consejos de rjmccann101 y exportar primero a un libro de trabajo de MS Excel que funcionará incluso con las versiones más antiguas de Access. Alternativamente, puede especificar consultas en sus tablas y exportar sus resultados de la misma manera.

Aparte de eso, los archivos de datos de Access son bases de datos autocontenidas. Si no tiene una copia de MS Access a la mano pero solo el archivo .mdb, puede conectarse a él y consultar los datos de la tabla usando SQL, por ejemplo, usando un simple script 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();

Olfan
fuente
ummm, nunca usé el acceso en el pasado, pero uso sql un poco. Normalmente uso Python como mi lenguaje de scripting. Me pregunto si puedo conectarme a la base de datos de forma similar con python.
Richard
Python es bastante potente, aunque yo no lo uso, sé que es capaz de conectarse a bases de datos. ODBC es un estándar bastante común, también.
Olfan
1

Revisa este hilo de StackOverflow :

  1. Realice una consulta en la tabla con solo las columnas que desee y guárdela.
  2. Seleccione la consulta y luego acceda a Archivo- & gt; Exportar (seleccione Guardar como "texto * .txt, * cvs, etc.") y siga las indicaciones
digitxp
fuente
hmmm, necesito convertir una gran cantidad de archivos ... Debería haberlo hecho en mi pregunta. Editando ahora.
Richard
1

Solo tengo Access 2007 disponible aquí, pero Exportar a Excel y guardar como CSV debería funcionar.

Jackson
fuente
Er, si tiene A2007, ¿por qué no exportar directamente a CSV, que es totalmente compatible con Access?
David W. Fenton
1

Para el procesamiento masivo, recomiendo un script como este (ejemplo en 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 )  

Esto "convertirá" cada archivo .mdb en un grupo de archivos .csv que recibirán el nombre del contenedor de la base de datos (el archivo .mdb) y el nombre de la tabla. Si no necesita valores reales separados por comas, sino un canal, un punto y coma o cualquier otra información separada, simplemente edite la declaración de impresión en consecuencia.

El ejemplo requiere que todos sus archivos .mdb residan en el mismo directorio que está codificado en la variable $ dir, pero esto se puede cambiar fácilmente para que pueda entregar nombres de directorios o nombres de archivos individuales .mdb en la línea de comandos.

Tenga en cuenta que el ejemplo no es robusto ni a prueba de fallas de ninguna manera, omití cualquier detección y corrección de errores por motivos de legibilidad.
Además, tenga en cuenta que también hay implementaciones de Perl en Windows (ActiveState Perl, por ejemplo) y que el ejemplo debería funcionar en un entorno de Windows con solo ligeras adaptaciones a la notación de ruta.

Olfan
fuente
0

Es posible que desee revisar una herramienta que escribí llamada PlaneDisaster.NET . No exportará los archivos en masa, sino su código abierto, y si conoce C # sería un buen punto de partida para un programa que lo haga.

Justin Dearing
fuente