una para open migrar mdb datos conexion como mysql database ms-access odbc

para - ¿Cuál es la mejor manera de sincronizar datos entre MS Access y MySQL?



mysql oledb (5)

Tengo una base de datos de acceso en una máquina de Windows, que debo importar a mysql en un servidor web de Linux. En este momento, la tabla dabatbase de acceso se exporta como un archivo de texto, se copia automáticamente con ftp y luego se carga en mysql.

¿Hay una mejor manera de hacerlo, tal vez usando una conexión ODBC u otra cosa?

¿Cuál es la mejor manera de limitar la copia de información que ya está presente, es decir, transferir únicamente los registros que están en la base de datos de acceso pero aún no en el mysql?

La base de datos de acceso es manejada por otro programa, y ​​sería mejor si no tuviera que hacer cambios en ella, o incluso abrirla. No hay posibilidad de necesitar importar registros actualizados de la base de datos de acceso. La base de datos mysql será la fuente principal, y algunos registros serán eliminados o modificados. Solo quiero importar registros que nunca estuvieron en la base de datos mysql, no restaurar los que fueron eliminados a propósito.


¿Por qué no vincular las tablas a través de ODBC como lo sugiere Keltia, y luego usar una serie de consultas para agregar registros que faltan y actualizar los registros modificados? Las consultas se pueden ejecutar a través de VBA. ADO también funcionará bien con MySQL y Access.

Algunas notas sobre el código utilizado en Access:

Set db = CurrentDb strSQL = "Insert INTO [ODBC;DSN=DSNName;].NameOfMySQLTable " _ & "Select AnyField As NameOfMySQLField FROM AnyAccessTable;" db.Execute strSQL, dbFailOnError End Sub

- http://forum.lessthandot.com/viewtopic.php?f=95&t=3862


Para ayudar a transferir solo los cambios, le sugiero que agregue una nueva tabla a su base de datos de Access llamada RecordChanges.

La estructura de la tabla sería la siguiente:

RecordChangeID (int) - Primary Key (Autonumber) TableName (varchar(250)) - Name of table that changed RecordID (int) - ID of the record in that table that was added / modified RecordAction (char(1)) - ''A'' if add, ''M'' if modified or ''D'' if deleted

Nota: al agregar una ID de usuario y otros detalles, podría tener una buena pista de auditoría.

Esta es la parte dolorosa, pero crearía una subrutina en su aplicación para agregar un registro a esta tabla cada vez que se cambie un registro en una tabla que quiera sincronizar con su base de datos MySQL.

Una vez hecho esto, crearía otra tabla con un solo registro, llamado ExportStatus, con la siguiente estructura:

LastRecordChangeID (int) - ID of the last Record Change you exported in the Record Changes table

Luego crea una subrutina para revisar todos los Cambios desde la última exportación (recuperas esto de tu tabla ExportStatus) y genera instrucciones SQL para actualizar tu base de datos MySQL, asegurándote de actualizar tu tabla ExportStatus cuando termines. Puede eliminar todos los registros RecordChange que se exportaron con éxito, o dejarlos como un seguimiento de auditoría.

Antes de implementar esto, necesitaría hacer una sincronización inicial de la forma en que lo está haciendo actualmente.


Si desea actualizaciones incrementales, la forma de hacerlo es escribir un script que se conecte a ambas bases de datos (a través de ODBC al menos en el lado Acceso) y compare todas las tablas. La ventaja de copiar todo es que está seguro de no olvidar nada, el inconveniente puede ser el tamaño y el hecho de que el mysql no estará disponible durante la recarga.



Yo haría lo siguiente:

Vuelque todos sus datos de acceso en una tabla temporal en MySQL, que será su fuente de datos "principal" por un momento. Debería poder hacerlo configurando una fuente de datos ODBC apuntada a MySQL, haciendo clic con el botón derecho en la tabla Acceso y presionando "Exportar".

  1. Ejecute un script UPDATE en MySql para actualizar los registros coincidentes
  2. Ejecute un script INSERT en MySql para insertar nuevos registros
  3. (Opcional, dependiendo de si esto es lo que quiere): ejecute un script DELETE en MySql para eliminar registros que NO SE encuentran en la tabla de acceso recién importada.
  4. Suelta la tabla temporal en MySql.

Es posible hacer todo esto desde dentro de MS Access, a través de tablas vinculadas. Pero el rendimiento no será tan bueno, y requerirá cambiar las declaraciones de acceso cuando / si cambian sus tablas MySql.

Esta respuesta puede ser útil para usted también .