Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Pasar de Access a MySQL

Tengo unos compañeros que se empeñan en utilizar Ms-Access, que es de los pocos programas que no funcionan de manera alguna en GNU/Linux (solo queda el recurso de usar una máquina virtual, como VirtualBox).
Por ello cuando necesito trabajar con ella (o ellos necesitan hacer consultas rápidas y como no saben me lo piden a mi) utilizo un pequeño script para pasar las tablas de Ms-Access a MySQL.
Y dice así:

#!/bin/bash
#
# vuelca_mdb 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-07
#

# DATOS DEL FICHERO MDB
mdb=xxx.mdb
TABLA1=XXX
TABLA2=YYY

# DATOS DE MYSQL
bbdd=xxx
usuario=xxx
clave=xxx

# FICHERO TEMPORAL
tmp="tmp.$$"

echo "Exportando desde mdb..."
mdb-schema $mdb -S > sql-creacion_mdb$$.sql
mdb-export $mdb $TABLA1 -S -I > sql-datos_mdb$$.sql
mdb-export $mdb $TABLA2 -S -I >> sql-datos_mdb$$.sql

echo "Modificando ficheros exportados..."
# Hay que añadir "IF EXISTS" al "DROP TABLE"
sed 's/DROP TABLE/DROP TABLE IF EXISTS/g' sql-creacion_mdb$$.sql > $tmp
# Hay que cambiar "Long Integer" por "Integer"
sed 's/Long Integer/Integer/g' $tmp > sql-creacion_mdb$$.sql

# Hay que añadir un punto y coma ";" al final de cada linea -que acaba en ")"-
sed -e s/.$/\)\;/g sql-datos_mdb$$.sql > $tmp
mv $tmp sql-datos_mdb$$.sql

echo "Cargando datos en MySQL..."
mysql -D $bbdd -u $usuario --password=$clave < sql-creacion_mdb$$.sql
mysql -D $bbdd -u $usuario --password=$clave < sql-datos_mdb$$.sql

echo "Borrando ficheros temporales..."
rm sql-creacion_mdb$$.sql
rm sql-datos_mdb$$.sql


A continuación otros comandos que pueden ser utiles (proceden del paquete mdbtools).

Mostrar la versión del fichero mdb:
$ mdb-ver xxx.mdb

Mostrar las tablas de un fichero mdb (-1 para mostrar una tabla por fila):
$ mdb-tables -1 xxx.mdb

Generar un fichero C con un Array con los datos de una tabla:
$ mdb-array xxx.mdb TABLA

Access, mdb, mysql, script, prompt, Ms-Access, mdbtools
Category: BBDD, GNU/Linux, Prompt