En algún momento de nuestras precarias vidas, decidimos que las obsoletas BB.DD de Access que andan rodando por los discos duros se convierten en un peligro, todo el mundo puede abrirlas, editarlas, y guardarlas, y cuando tenemos en nuestra tarea, convertirlas a MySQL, ¿habría algún método para hacerlo? Aquí te presentamos a cual mejor. 3 opciones para elegir.
( PRIMIRA OPCIÓN )
Nota del 1 al 5, un 2
Metodología básica
Básicamente se pueden dividir los métodos en directos e indirectos. Los métodos directos abren los archivos .DBF o .MDB, se conectan a la base de datos MySQL y transfieren sus contenidos a través de esa confección. Los métodos indirectos generan uno o más archivos temporales, en base a los que posteriormente se crearán las tablas de la base de datos y/o insertarán los registros.
En el caso de métodos indirectos, para cada archivo .dbf o tabla Access, estos son los pasos básicos que han de tomarse para migrar:
Generar un archivo ASCII con las instrucciones SQL para la creación de la/s tablas/s.
Exportar desde el archivo .MDB o archivos .DBF a un/unos archivo/s ASCII con: a) las instrucciones SQL para insertar datos en las tablas o b) los datos puros, delimitados por comas/tabulaciones, etc.
Ejecutar el archivo con las instrucciones SQL de creación de tablas.
Ejecutar el archivo ASCII con instrucciones SQL de inserción, o IMPORTAR archivo ASCII con datos puros usando el comando sql LOAD DATA INFILE.
Entorno de trabajo
Para los propósitos de este texto, vamos a definir algunos aspectos del ambiente donde trabajar:
Una estación con Windows y Linux instalados.
En la partición Linux, tener instalado un editor ASCII y la base de datos MySQL como mínimo, con el hostame configurado como localhost (bueh…) y con acceso a la partición windows, para este caso, tener acceso a c:/ en el directorio /mnt/windows).
En la partición Windows tener instalado Microsoft Access versión 97 como mínimo. Los archivos temporales de conversión se grabarán en el directorio c:/temp ( /mnt/windows/temp desde linux).
Una base de datos, en ambos formatos .DBF y .MDB, en este caso conteniendo los datos de una colección de libros. Los archivos residirán en el directorio c:data.
Para usar la herramienta dbtools, es necesario contar con DOS estaciones conectadas en red, una con Windows y DBTools instalados y otra con Linux y MySQL instalados.
Es recomendable acceder a la base de datos como un usuario común con privilegios bien acotados, o en todo caso tener disponible varios usuarios tipo dependiendo del trabajo (tipo dba para acceso total, común para entrada de datos o listados por ejemplo), pero NUNCA como root, porque este usuario tiene todos los privilegios en el sistema, incluso para dañarlo seriamente.
Conversión sin herramientas específicas (o con herramientas nativas, o lo que sea bah…)
Hay buenas razones para no depender de herramientas especializadas de conversión (la más sencilla de las cuales es no disponer de ellas , sin olvidar el masoquismo), como por ejemplo la necesidad de adaptar las tablas a las características de la nueva base de datos. En mi caso en particular, siempre he tenido que generar la estructura con algún conversor y modificar o agregar sentencias sql para aprovechar alguna característica ausente o diferente en la base de datos original.
Generar estructura con editor de texto
En última instancia he tenido que arreglarme creando las sentencias con cualquier editor ASCII:
CREATE DATABASE libros; |
Luego de guardarlo como libros.sql, genero la base de datos pasando libros.sql por la consola mysql:
mysql < /mnt/windows/temp/libros.sql |
Con esto ya tenemos creada la base de datos LIBROS con sus tablas. Esta estructura nos servirá para convertir desde cualquier formato.
Exportar tablas desde Access
Después, volviendo a Windows, desde Access, por cada tabla se usa la opción “Archivo / Guardar como o exportar… / En un archivo o una base de datos externo”, en la ventana de diálogo, en la opción “Guardar como tipo:” seleccionar “Archivos de texto”
En la ventana “…” seleccionando el botón “Avanzado…” se pueden configurar estas opciones de exportación sin pasar por los sucesivos pasos del asistente:
Formato de archivo: Delimitado |
Un poco confuso todo no? No es para tanto, probando con el programa todo se ve más claro. Luego de este paso deberíamos tener cuatro archivos: autorlib.txt, autores.txt, libros.txt y temas.txt
Exportar tablas desde xBase
Prácticamente cualquier dialecto xBase soporta el comando COPY TO (archivo) DELIMITED
Para nuestro caso:
USE libros |
Si es un entorno de comando se pueden ejecutar uno por uno, si es un lenguaje compilado como clipper, se graba en archivo .prg, se compila y se ejecuta.
Otra vez, deberíamos tener cuatro archivos: autorlib.txt, autores.txt, libros.txt y temas.txt
Importación de tablas a MySQL
En cualquiera de los dos casos, otra vez en linux, desde la consola MySQL se ejecuta el comando LOAD DATA INFILE por cada tabla
LOAD DATA INFILE '/mnt/windows/temp/libros.txt' INTO TABLE libros FIELDS TERMINATED BY ',' |
Xbase a Mysql
dbf2mysql
http://mysql.vision.cl/Downloads/Contrib/dbf2mysql-1.14.tar.gz[1]
dbf2mysql es una pequeña y excelente aplicación que genera información SQL a partir de archivos xBase. He aquí una traducción de sus opciones:
|
Suponiendo que quiero hacer una conversión directa, solo necesito crear la base de datos en blanco, por ejemplo desde la consola mysql:
create database libros; |
Y luego ejecutar dbf2mysql para crear las tablas e insertar los datos:
dbf2mysql -h localhost -d libros -t autores -c -f -p idautor /mnt/c/data/autores.dbf |
La principal desventaja de este método es que no se crean algunos atributos deseables, como es el caso de los campos autoincrementables. En este caso, lo más recomendable es crear nuestra propia estructura, otra vez volvemos al método de crear la estructura con un editor ASCII y generar la base de datos vacía con la consola MySQL como se explico aquí. Luego se insertan los datos con este conjunto modificado de comandos dbf2mysql:
dbf2mysql -h localhost -d libros -t autores -f /mnt/c/temp/autores.dbf |
Access a Mysql
access_to_mysql.txt
http://mysql.vision.cl/Downloads/Contrib/access_to_mysql.txt[1]
Este es un módulo de access que crea un archivo con las instrucciones sql para crear las tablas e insertar los registros, similar a como lo hace el comando mysqldump (bueno, por algo el archivo que se crea se llama mysqldump.txt).
Para usarlo, ha de crearse un módulo de access y pegarle el contenido de access_to_mysql.txt para después ejecutarlo. Al finalizar, quedará creado un archivo mysqldump.txt en el directorio c:/temp.
exportsql
http://mysql.vision.cl/Downloads/Contrib/exportsql.txt[1]
Este es otro módulo para access que genera archivos con instrucciones sql. La diferencia con el programa anterior radica en que lo podemos configurar a través de unas variables declaradas al principio, por ejemplo:
ADD_SQL_FILE: contiene el directorio y archivo que contendrá las instrucciones SQL de creación e inserción.
DEL_SQL_FILE: contiene el directorio y archivo que contendrá las instrucciones SQL de borrado de las tablas.
DISPLAY_WARNINGS: indica si las advertencias de errores se muestran durante el proceso de conversión (aconsejo cambiarlo a FALSE, porque si se da un error durante la conversión de registros y son muchos registros, se puede cansar de dar OK en el mensaje de error).
Previo a la definición de cada tabla hay instrucciones DROP TABLE, que darán error en el caso de que se lo use con la base de datos vacía, para solucionarlo se pueden borrar estas instrucciones, o bien agregarles la cláusula IF EXIST. A los campos que forman parte de la clave primaria se les debe agregar la cláusula NOT NULL, o el script terminara con error cuando se intente crear las tablas. |
Después de generados los archivos con estos módulos, hay que pasar a Linux y ejecutarlos, a través de la consola mysql. Para el caso de access_to_mysql, suponiendo que se creó la base de datos y que el archivo reside en /mnt/windows/temp/mysqldump.txt, las tablas se generan con este comando:
mysql < /mnt/windows/temp/mysqldump.txt |
Para el caso de exportsql.txt, las tablas se generan con el comando:
mysql < /mnt/windows/temp/esql_add.txt |
mdbtools
http://mdbtools.sourceforge.net
Esta es una serie de utilidades Linux para conversión y manejo de bases de datos Access:
|
Este es un paquete que esta en su versión 0.4, así que no es totalmente funcional, lo cual no quiere decir que no se lo pueda usar en ambiente de producción. Básicamente es posible acceder a las bases de datos sin utilizar Windows, creando el archivo de definición de la base de datos con la utilidad mdb-schema y completar la definición de índices, crear los archivos temporales de conversión de datos con la utilidad mdb-export y posteriormente importarlos con el comando LOAD DATA INFILE en la consola mysql. |
dbtools
Esta es una excelente aplicación de autores brasileños, nativa de windows, que permite entre otras cosas convertir directamente desde muchos formatos, incluyendo Access y Xbase.
Para trabajar con la base de datos, lo primero es conectarse al servidor MySQl, desde server manager, cargar los datos del servidor: ip, hostname, base de datos, usuario e iniciar la confección.
Se inicia el proceso desde la opción de menu Data/New Import Data Wizard, el wizard es muy explicativo y bastante exhaustivo y está en la lengua nativa de la informática: el inglés.
En MySQL los nombres de tabla y campos son case-sensitive, es decir Apellido es diferente de apellido. Personalmente, me resulta engorroso recordar/tipear este tipo de información, así que siempre elijo tener todo en minúsculas. Access no hace este tipo de distinción, cosa que hay que tener en cuenta cuando se hace la conversión. MySQL tampoco es amigable en lo que se refiere a los nombres con espacios incluidos |
Conclusión
Por más completas que sean las herramientas, forman parte de un proceso que lleva varios pasos, casi siempre el resultado de la generación de las estructuras debe ser corregido antes de pasarlas a la base de datos, y por lo general el sistema más rápido para insertar datos es el comando LOAD DATA INFILE, así que una combinación de todos estos métodos suele ser buena alternativa. Y he incluido sólo el tema de convertir, por así decirlo, tabla a tabla,
OTRO tema es la conversión desde un esquema de información totalmente diferente a uno normalizado para bases de datos. Por lo general en estos casos, se ha de programar un script de conversión, que tome los datos, por ejemplo de una planilla de cálculo monolítica y la convierta en varias tablas normalizadas.
Notas
Este es uno de tantos mirrors de esta página, la lista completa esta en http://www.mysql.com/downloads/download.php?file=Downloads/Contrib/ |
(/FIN DE LA PRIMERA OPCIÓN )
==================================================
( SEGUNDA OPCIÓN )
Nota del 1 al 5, un 3
Es un compendio de varias opciones.:
1. Bajarse el Driver de ODBC de MySQL y exportar la BB.DD. a través de este driver, tabla a tabla.
2. Utilizar el sitio Access2MySQL, que yo no recomiendo.
3. Usar cualquiera de los software propietarios para exportarlos como MySQLFront (Es de pago , pero funciona completo por el un mes la demo).
( / FIN DE LA SEGUNDA OPCIÓN )
=========================================
( TERCERA OPCIÓN )
Nota del 1 al 5, un 4.5
Los pasos que debemos seguir para instalar este módulo, y su posterior uso son:
1. Abre el archivo de Access .mdb que deseas exportar.
2. En la ventana de objetos de la BD selecciona “Módulos”, y después en “Nuevo”.
3. Entonces se te abrirá una ventana nueva, borra todo texto (código) que haya escrito.
4. Copia todo el texto del archivo de Pedro Freire y pégalo en el nuevo módulo.
5. Cierra la ventana de código del módulo, selecciona que “Sí” desea guardar los
cambios y nombra el módulo (p.e. “MexportSQL”). El módulo es ahora parte de tu base de datos Access
6. Vuelve a abrir el módulo, o pincha con el ratón en “Diseño” con nuestro nuevo módulo seleccionado. Mueve el cursor hasta donde aparezca la primera palabra “Function”, y presiona F5 o selecciona “Ejecutar” en el menú.
La ejecución del módulo nos creará dos archivos (esql_add.txt y esql_del.txt) en el directorio C:/temp (que debemos crear en caso de no existir y que trae por defecto, pero lo podemos cambiar). (y que debe existir) A nosotros el archivo que nos interesa es esql_add.txt, el cuál como mejor nos parezca deberemos llevarnoslo a nuestra máquina Linux.
Espero que te diviertas!