MDB2SQLite_jamaro: Conversor Acces a SQLite (20120211)
MDB2SQLite_jamaro: Conversor Acces a SQLite (20120211)
Sigo con mis progresos en mi intención de migrar mis bases de datos de Access a Autoit.
Ya estoy creándome un programa para una de las bases de datos que utilizo, haciendo un GUI, pero siempre voy saltando de una cosa a otra, y esta vez ha sido para hacer un programa que convierte una base de datos .mdb de Access a SQlite. Mejor dicho, de momento, lo que hace es crear una base de datos SQLite con las tablas y sus datos de una base .mdb.
Está pendiente, entre otras cosas, leer las "relaciones" de las tablas de Access y crearlas en SQLite con el uso de FOREIGN KEY y REFERENCES, pero ya llegará.
Como siempre, para llegar a esta solución he dado algunas vueltas.
El programa utiliza ActiveX Data Objects - ADO. (No sé si viene por defecto con todos los Windows)
He utilizado parte de las rutinas de access.udf de George (GEOSoft) Gedye (http://autoit.mvps.org/udf_code.aspx?udf=access), las cuales he modificado para mis necesidades.
Las primeras pruebas eran muy lentas, ya que utilizando la función _accessQueryLike() de George, la lectura de los registros de la .mdb se hacía una a una, empezaba por el primer registro, leía y saltaba al siguiente, así hasta llegar al último.
Indagando por internet, en la página http://www.w3schools.com/ado/met_rs_getrows.asp he visto que con el método GetRows del ADO se crea una matriz con todos los registro de una consulta RecordSet realizada, y si en una tabla con unos 11.000 registros, el primer método me tardaba varios minutos, con el segundo método apenas son unos segundos ¡Optimización conseguida!
El uso del programa es sencillo:
1. Seleccionar archivo .mdb (a partir de la carpeta desde la que se ejecuta el programa)
2. El programa crea un archivo .db con el mismo nombre que la base de datos origen.
Para probarlo, si no tenéis una Base de Datos .mdb podéis bajar un ejemplo (VERDULEROS.ZIP) de: http://superalumnos.net/base-de-datos-d ... uleros-mdb
El código creo que está bastante claro (aunque siempre se puede ordenar más) pero si alguien necesita alguna explicación de lo que he hecho, sólo tiene que preguntar.
Un saludo y ¡buenas conversiones!
EDITADO 11/02/2012: Subo el nuevo código, algo más estructurado y comentado. Ahora las tablas además de tener las PRIMARY KEYS también tienen las FOREIGN KEYS.
EDITADO 19/07/2012: A petición de un usuario, subo el programa ejecutable en exe.
Ya estoy creándome un programa para una de las bases de datos que utilizo, haciendo un GUI, pero siempre voy saltando de una cosa a otra, y esta vez ha sido para hacer un programa que convierte una base de datos .mdb de Access a SQlite. Mejor dicho, de momento, lo que hace es crear una base de datos SQLite con las tablas y sus datos de una base .mdb.
Está pendiente, entre otras cosas, leer las "relaciones" de las tablas de Access y crearlas en SQLite con el uso de FOREIGN KEY y REFERENCES, pero ya llegará.
Como siempre, para llegar a esta solución he dado algunas vueltas.
El programa utiliza ActiveX Data Objects - ADO. (No sé si viene por defecto con todos los Windows)
He utilizado parte de las rutinas de access.udf de George (GEOSoft) Gedye (http://autoit.mvps.org/udf_code.aspx?udf=access), las cuales he modificado para mis necesidades.
Las primeras pruebas eran muy lentas, ya que utilizando la función _accessQueryLike() de George, la lectura de los registros de la .mdb se hacía una a una, empezaba por el primer registro, leía y saltaba al siguiente, así hasta llegar al último.
Indagando por internet, en la página http://www.w3schools.com/ado/met_rs_getrows.asp he visto que con el método GetRows del ADO se crea una matriz con todos los registro de una consulta RecordSet realizada, y si en una tabla con unos 11.000 registros, el primer método me tardaba varios minutos, con el segundo método apenas son unos segundos ¡Optimización conseguida!
El uso del programa es sencillo:
1. Seleccionar archivo .mdb (a partir de la carpeta desde la que se ejecuta el programa)
2. El programa crea un archivo .db con el mismo nombre que la base de datos origen.
Para probarlo, si no tenéis una Base de Datos .mdb podéis bajar un ejemplo (VERDULEROS.ZIP) de: http://superalumnos.net/base-de-datos-d ... uleros-mdb
El código creo que está bastante claro (aunque siempre se puede ordenar más) pero si alguien necesita alguna explicación de lo que he hecho, sólo tiene que preguntar.
Un saludo y ¡buenas conversiones!
EDITADO 11/02/2012: Subo el nuevo código, algo más estructurado y comentado. Ahora las tablas además de tener las PRIMARY KEYS también tienen las FOREIGN KEYS.
EDITADO 19/07/2012: A petición de un usuario, subo el programa ejecutable en exe.
- Adjuntos
-
- MDB2SQLite_jamaro_11-FUNCIONAL.zip
- Programa ejecutable comprimido en ZIP
- (309.31 KiB) Descargado 392 veces
-
- MDB2SQLite_jamaro.au3
- Código del programa 20120211
- (24.76 KiB) Descargado 302 veces
Última edición por jamaro el 19 Jul 2012, 17:23, editado 3 veces en total.
- arkcrew
- Profesional del Autoit
- Mensajes: 506
- Registrado: 28 Sep 2009, 19:17
- Ubicación: Granada, España
- Contactar:
Re: MDB2SQLite_jamaro: Conversor de Base de Datos Acces a SQ
Buenas Jamaro,
Justo ahora quería empezar a mirar un poco como va el tema de las bases de datos con el SQLITE ya que no se, no entiendo bien como rula así que como el acces si que lo se manejar bien, con tu aplicación me va a ser muy útil!
Ya te contaré que tal rula!
Saludos!
Justo ahora quería empezar a mirar un poco como va el tema de las bases de datos con el SQLITE ya que no se, no entiendo bien como rula así que como el acces si que lo se manejar bien, con tu aplicación me va a ser muy útil!
Ya te contaré que tal rula!
Saludos!
ArkCrew
http://www.nodluna.blogspot.com
http://www.nodluna.blogspot.com
- BasicOs
- Site Admin
- Mensajes: 2091
- Registrado: 21 Nov 2006, 19:24
- Ubicación: El Internet - (Canarias, España)
- Contactar:
Re: MDB2SQLite_jamaro: Conversor de Base de Datos Acces a SQ
Buen aporte
tambien si lo deseas puedes hacer un modo batch si se ejecuta con /auto , que los mdb de la carpeta los pase a sqlite.
Y si lo deseas tambien ponerlo en función mdb2sqlite(baseorigen,basedestino,opcs) , por si hay que hacerlo más frecuentemente..
Salu22:)
tambien si lo deseas puedes hacer un modo batch si se ejecuta con /auto , que los mdb de la carpeta los pase a sqlite.
Y si lo deseas tambien ponerlo en función mdb2sqlite(baseorigen,basedestino,opcs) , por si hay que hacerlo más frecuentemente..
Salu22:)
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: MDB2SQLite_jamaro: Conversor de Base de Datos Acces a SQ
¡Excelente trabajo!
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: MDB2SQLite_jamaro: Conversor de Base de Datos Acces a SQ
arkcrew yo estoy empezando con SQLite y la verdad es que, en principio, no es muy complicado. La complejidad creo que depende del uso de las tablas, sus referencias,... que dependerá del propio programa. En Access "lo tenemos" relativamente fácil a la hora de crear relaciones, formularios, informes,... pero creo que con Autoit conseguiremos buenos resultados.
Quizás lo que me vea más complicado sea la salida de los datos en papel (Informes de Access), pero de momento, con tenerlo en pantalla me resultará suficiente.
BasicOS, gracias Echaré un vistazo a las opciones que comentas.
Ximorro gracias
Quizás lo que me vea más complicado sea la salida de los datos en papel (Informes de Access), pero de momento, con tenerlo en pantalla me resultará suficiente.
BasicOS, gracias Echaré un vistazo a las opciones que comentas.
Ximorro gracias
Re: MDB2SQLite_jamaro: Conversor Acces a SQLite (20120211)
En el primer mensaje subo el nuevo código, algo más estructurado y comentado. Ahora las tablas además de tener las PRIMARY KEYS también tienen las FOREIGN KEYS.
- BasicOs
- Site Admin
- Mensajes: 2091
- Registrado: 21 Nov 2006, 19:24
- Ubicación: El Internet - (Canarias, España)
- Contactar:
Re: MDB2SQLite_jamaro: Conversor Acces a SQLite (20120211)
buen aporte. Nada como Sqlite o mysql para olvidar lo de base de datos "corrompida" y luego tener que limpiar y recuperar ;)
Esos tiempos del Access/VB
Salu22:)
Esos tiempos del Access/VB
Salu22:)