Mostrando entradas con la etiqueta migration. Mostrar todas las entradas
Mostrando entradas con la etiqueta migration. Mostrar todas las entradas

domingo, 23 de agosto de 2020

Migrar MDB de Microsoft Access a SQL MySql

Si buscas como migrar una base de datos MDB de Microsoft Access a SQL de MySql, verás que existen varios métodos para realizarlo. Tras probar diferentes, el que mejor se ha adaptado a mis necesidades ha sido el que comento aquí. Eso sí, se han perdido algunas relaciones y también los comentarios en el diseño de la estructura que había en Microsoft Access.

Lo primero que hay que hacer, es tener una máquina Linux con las mdbtools, para ello:

  •  Actualiza los repositorios para obtener la lista de los últimos paquetes y sus actualizaciones: 
tu-maquina:~: sudo apt-get update -y
  •  Ejecuta la instalación del paquete mbdtools (la opción -y es para que no te pregunte más y lo haga directamente junto con todas las dependencias):
tu-maquina:~: sudo apt-get install -y mdbtools

A continuacíon para exportar el esquema o arquitectura de la base de datos a un archivo SQL, se realizaría los siguiente:

tu-maquina:~: mdb-schema <tu-base-de-datos>.mdb mysql > squema.sql

Por último, para exportar los datos a un archivo SQL junto con el esquema o arquitectura es algo más elaborado y lo realizaremos mediante el siguiente script (en mi caso lo he llamado "mdb_to_mysql.sh":

#!/bin/bash
TABLES=$(mdb-tables -1 $1)

for t in $TABLES
do
    echo "DROP TABLE IF EXISTS $t;"
done

mdb-schema $1 mysql

for t in $TABLES
do
    mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 $t
done

Finalmente, bastaría ejecutarlo para obtener el SQL con todos los INSERT y CREATE TABLE necesarios:

tu-maquina:~: sudo sh mdb_to_mysql.sh <tu-base-de-datos>.mdb > datos.sql

viernes, 5 de abril de 2019

Memory leak con QIcon en Qt 5.9.4 y solución

Tras realizar una de las migraciones de Qt 4.7.4 a Qt 5.9.4 y hacer las correspondientes cambios según la guia de diseño (aquí tenéis más detalles de la misma: Migrating from Qt4 to Qt5). Nos encontramos que nuestra aplicación terminaba crasheando y no encontrábamos la razón. Tras ir analizando paso a paso que estaba pasando y dónde se iba la memoria, encontramos que el árbol que tengo QTreeWidget, lo tengo decorado con iconos QIcon.

En mi caso, requiero un montón de elementos (+200) en el árbol y siguen creciendo ya que es el elemento central de mi aplicación (un IDE especifico). Para la carga de las imágenes utilizaba recursos internos, inicializados de la siguiente manera:

QStandardItem* myItem = new QStandardItem(tr("Item name")); 
myItem->setIcon(QIcon(":/Icons/iconName.png"));

En modo DEBUG este tipo de inicialización llegaba a consumir hasta casi 50MB en memoria por cada elemento del árbol. Tras mucho googlear, encontré en QtCentre.org una entrada similiar (link) y y también el bug relacionado (enlace BUG) (sin correción en el momento que escribo).

Lo que se puede hacer para evitar ese consumo de memoria excesivo, es inicializar el objeto de QIcon utilizando el constructor al que se le pasa un objeto de QPixmap. En el caso anterior sería:


QStandardItem* myItem = new QStandardItem(tr("Item name")); 
myItem->setIcon(QIcon(QPixmap(":/Icons/iconName.png")));

Al final, el problema se encuentra con la inicialización del objeto por defecto. Aún haciendo esto, hay que tener ene mente que no estamos haciéndolo igual y tenemos en algún lugar que hacer algún cambio extra en el código. Por ejemplo, en mi caso tuve que en otro lugar hacer un resize de la imagen.






Problemas con python "/usr/bin/env &lt; &lt; python&gt;&gt;: No such file or directory "

Es posible que hayas llegado aquí por un mensaje similar al siguiente:  /usr/bin/env: <<python>>: No such file or directory   Cu...