Migrar de MS Access a MySQL con relaciones

He usado herramientas como MySQL Migration Toolkit (*) y Bullzip’s Access To MySQL, ambos hacen un excelente trabajo pero no exporta las relaciones entre tablas. Hacer esta tarea nos puede tomar varias horas (hasta ahora):

Escribí un código VBA para identificar las relaciones generando código MySQL con las sentencias de creación, esto puede ser muy útil después de la migración usando cualquier herramienta libre.

Option Explicit
'Copiar y pegar esta función en un módulo nuevo/existente de MS Access.

Public Sub printRelations()
    Dim sql, fk As String
    Dim i, j As Integer
    For i = 0 To CurrentDb.Relations.Count - 1
        sql = "ALTER TABLE `" & CurrentDb.Relations(i).ForeignTable & _
            "` ADD CONSTRAINT `" & CurrentDb.Relations(i).Name & "` FOREIGN KEY ("
        fk = "("
        For j = 0 To CurrentDb.Relations(i).Fields.Count - 1
            sql = sql & "`" & CurrentDb.Relations(i).Fields(j).ForeignName & "` ,"
            fk = fk & "`" & CurrentDb.Relations(i).Fields(j).Name & "` ,"
        Next j

        sql = Left(sql, Len(sql) - 1)
        fk = Left(fk, Len(fk) - 1)
        fk = fk & ")"
        sql = sql & ") REFERENCES `" & CurrentDb.Relations(i).Table & "`" & fk & ";"

        Debug.Print sql
    Next i
End Sub

Para ejecutar el código anterior, debemos invocarlo desde la ventana de Inmediato (Ctrl+G), luego solo tendremos que copiar el SQL generado para llevarlo a MySQL.

Enjoy!

(*)MySQL Migration Toolkit esta descontinuado pero aun sigue disponible desde los servidores Mirror de MysQL como:
http://mirrors.dotsrc.org/mysql/Downloads/MySQLGUITools/

2 pensamientos en “Migrar de MS Access a MySQL con relaciones

  1. ALTER TABLE `Clientes` ADD CONSTRAINT `[D:\bd\pagina\base de datos ba_v1_be.accdb].cel1Clientes` FOREIGN KEY (`cel1_id` ) REFERENCES `cel1`(`cel1_id` );
    MySQL ha dicho: Documentación

    #1215 – Impossible d’ajouter des contraintes d’index externe

    como arreglo este error, ayudame por favor

    • Hola Andres

      Podrías corregir la referencia de éste modo:

      ALTER TABLE `Clientes` ADD CONSTRAINT `cel1Clientes` FOREIGN KEY (`cel1_id` ) REFERENCES `cel1`(`cel1_id` );

      Al parecer `cel1Clientes` esta en otra base de datos , por eso se ve: [D:\bd\pagina\base de datos ba_v1_be.accdb]

      Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *