sábado, 14 de septiembre de 2019

Exportar una tabla de Access a MySQL

Tenemos una base de datos en Access y necesitamos importar los datos desde Access que están en Windows a una base de datos MySQL que está en un servidor Linux.  Nos enfrentamos a dos dificultades importantes:

La primera es exportar datos de Access a MySQL, he buscado en internet y he encontrado algunos trucos, pero suelen ser métodos complejos que implican descargar en nuestro equipo controladores ODBC y luego hay que configurarlos, las pruebas que hice no fueron exitosas.

La otra dificultad es que el destino no se encuentra en el mismo equipo sino en un servidor web con Linux.

La solución final que tomé y yo creo que aunque no es directa es relativamente sencilla: consiste en exportar los datos en un archivo XML y luego recuperarlos en MySQL importando el archivo XML. Pero hay un problema que veremos más adelante: el formato.

Para exportar en XML basta con entrar en Access y en la pestaña datos externos elegir Archivo XML

Exportar datos desde Access


Exportar una tabla de  Access a MySQL
Le indicamos donde queremos que vaya el archivo

Exportar datos de  Access a MySQL

Seleccionamos la información a exportar sólo XML.

Convertir datos Access a XML

Vemos el archivo creado.

Archivo XML generado desde Access

Ahora metemos el archivo en un pendrive y vamos al servidor Linux desde el cual capturamos el pendrive.

Capturar pendrive en Linux

Dejamos el archivo donde queramos.

Importar XML en Linux


Modificar el archivo XML


La idea general es siempre automatizar el proceso en la medida de lo posible, pero esta vez me ha resultado imposible porque el formato XML que guarda Access no coincide con el formato que lee MySQL, así que no hay más remedio que modificar el archivo XML manualmente, afortunadamente hay una forma de “automatizar” esto de manera que podemos hacerlo rápidamente incluso aunque tengamos miles de registros.

Lo primero que tenemos que hacer es instalar en nuestro equipo  notepad ++ para tener un editor de código, o utilizar uno de nuestra preferencia. Podemos modificarlo en Windows o en Linux con Gedit o con el editor que más fácil y cómodo nos resulte.

En este caso hemos utilizado Notepad ++ desde Windows. En primer lugar abrimos el archivo .xml generado por Access.
Convertir formato fichero XML con Notepad++


Ahora tenemos que tratar de reescribirlo con el formato de salida de MySQL que es este:

<?xml version="1.0" encoding="UTF-8"?>

<!--
- phpMyAdmin XML Dump
-version 4.7.7
-https://www.phpmyadmin.net
-
-servidor: localhost:3306
-->

<pma_xml_export version="1.0">

<!-- 
-Base de datos: 'bitnami_worpress'
-->
<database name="bitnami_wordpress">
    <!-- Tabla wp_tbadjetivoneg -->
     <table name="wp_tbadjetivoneg">
<column name="Descripcion">incapacidad</column>
<column name="idTipo">0</column>
</table>
     <table name="wp_tbadjetivoneg">
<column name="Descripcion">crueldad</column>
<column name="idTipo">0</column>
</table>
     <table name="wp_tbadjetivoneg">
<column name="Descripcion">indiferencia</column>
<column name="idTipo">0</column>
</table>

Formatos XML

Como podemos ver, el formato no es muy parecido, pero podemos abrir juntos ambos archivos y cortar la cabecera del generado con MySQL y pegarla en el archivo generado por access.


Cambiar formatos XML


El campo IdAdjetivo es auto-numérico, es decir lo genera la base de datos al copiar los campos, por tanto debemos eliminar todos los campos <IdAdjetivo> del XML.

Ahora podemos utilizar la opción reemplazar de Notepad ++ pada sustituir   <Descripcion> por </column name=”Descripcion”>, y < IdTipo> por <column name =”IdTipo”>  podemos semi-automatizarlo pulsando el botón remmplazar todo, así aunque tengamos muchas líneas no será problema.

Convertir formatos en XML

También sustituimos  <tbNombreTabla> por <table name="wp_tbNombreTabla">  y </tbNombreTabla> por </table>

En nuestro caso particular, para no eliminar manualmente el campo autonumérico  <IdAdjetivo> lo sustituimos por “”. Podemos hacer una búsqueda genérica para no tener que ir borrando todos los códigos uno a uno. Para ello donde aparece un número de dos cifras lo sustituimos por [0-9]{2} y marcamos en la parte inferior la opción Expresión regular.

Convertir formatos en XML


Hecho esto ya tenemos nuestro archivo convertido al formato XML que leerá MySQL, finalmente, no hay que olvidarse de cerrar el archivo con:

</table>
</database>
</pma_xml_export>

Hecho esto ya tenemos listo nuestro archivo para importarlo desde MySQL.

Importar datos desde MySQL

Desde la consola de phpMyadmin pulsamos en el botón más a la derecha del todo y elegimos Importar. Esto nos abre una pantalla como la inferior donde seleccionamos el archivo  a importar.
Importar XML desde MySQL

Le indicamos que el formato es XML

importar XML desde phpMyAdmin

Una vez hemos importado, comprobamos que los datos estén importados correctamente en la tabla. Con nuestro sistema tal vez de fallos, pero aun así importará los datos.


Importar XML desde MySQL


No hay comentarios:

Publicar un comentario