Importaciones con SQLite


([N3] pacosatu) #1

Hola a todos.

Estoy haciendo estos dias importaciones masivas desde Aplicaciones Externas a Velneo y después de probar la opción ODBC y ficheros planos (CSV, XML, …) he llegado a la conclusión que en muchos casos la mejor opción es SQLite a través del plugin nativo de QT, integrado en Velneo mediante los comandos de BD Externas.

Las ventajas son varias.

  • No necesitamos instalar drivers ODBC en el PC, el plugin de SQLite está disponible siempre en el vClient.
  • La base de Datos SQlite es un fichero simple en el que podremos haber integrado una o varias tablas a importar.
  • Disponemos a la vez de la sencillez del uso de tablas (filas/columnas) y de todo un lenguaje estandar SQL para la obtención de datos.

Os dejo 2 enlaces, uno un tutorial de SQLite que es una Referencia perfecta para conocer SQlite en un par de horas (Velneo podría tomar nota de cómo se hacen Tutoriales) y otro es una magnífica herramienta de gestión SQLite (plugin de Firefox al estilo vDataClient aunque es gratuito, muchísimo más completo y para todos los Niveles).

http://www.tutorialspoint.com/sqlite/index.htm
https://addons.mozilla.org/es/firefox/addon/sqlite-manager/

Si dispones de un fichero CSV con cientos de miles de registros prueba a crear una tabla SQLite y lo importas (es una tarea muy sencilla). Una vez en Velneo podrás por ejemplo:

  • Obtener un subconjunto de registros para hacer pruebas de importación y no tener que esperar por los miles de registros:
    SELECT * FROM tabla1 WHERE rowid BETWEEN 1 AND 200
  • Puedes tambien usar la consulta anterior para dividir la importación en rangos de un tamaño adecuado para que las Transacciones no sean muy largas.
  • Puedes obtener los maestros directamente obteniendo los distintos valores mediante la consulta siguiente:
    SELECT DISTINCT poblacion FROM clientes
  • La base de datos SQLite puede tener Indices para acelerar la lectura de datos y Vistas para guardar consultas repetitivas.

Espero que este pequeño resumen os sirva para completar el abanico de posibilidades en la importación de datos a Velneo.

Saludos
Paco Satué


([N1] marianoyana) #2

Tendré que probar esta opción por que realizando pruebas he intentado de golpe 20000 registros y hasta menos, mediante archivos txt y se me queda bloqueado.


([N3] pacosatu) #3

Hola marianoyana.

Que se bloquee Velneo en las importaciones de datos creo que no tiene nada que ver con el uso de un método de importación u otro. Más bien será un problema con el manejo de las transacciones en el vServer cuando realizas Altas masivas de registros.

Primero comprueba la importación con pocos registros y siempre controla el maravilloso y detallado LOG de mensajes del vServer desde vAdmin.

Saludos
Paco Satué


([N1] Spicer) #4

De hecho a mi me parece notable que cuando vClient se rompe, no haya una descripción del error que lo generó.


([N4] Infortic) #5

peor todavía es que no lo haga el vServer cuando rompe


([N1] wikan) #6

Buenos días,
al hacer la importación tuviste que pelerte con subconsultas.
Me explico,


BD: SQL
   BD: Recorrer lista
      DB: SQL
        BD: Recorrer lista

Yo al hacerlo, deja de procesar la primera lista.
Lo hago contra MySQL


([N1] Spicer) #7

Estimados,

¿Cómo lo puedo hacer para importar los datos de una tabla SQLite a una de Velneo sin tener que asignar cada columna una a una?
Esto no es por pereza… es que son muchas tablas que debo importar y cada una tiene un montón de columnas. Me tomaría mucho tiempo ponerlas una a una

Mil gracias…!


([N1] wikan) #8

@Spicer, así de entrada no se me ocurre.
Quizás exportando a csv y usando el importador que propuso Jarboleya con la primera fila con los nombres de los campos.

La otra opción, es en las funciona nativas de Velneo puedes obtener el número de columnas y luego obtener el dato según el número de columna. Si además el nombre de la columna es al campo de Velneo, mediante javascript podrías montarte algo bastante dinámico.


([N1] Spicer) #9

Estimado WIkan,

Gracias por la respuesta. ¿Cómo podría hacerlo a mano? Crear nueva ficha en memoria y luego alta de ficha?


([N1] wikan) #10

No entiendo lo de “a mano”.

Siempre sin saber,
Sería algo así a grosso modo:

  • Saber cuantas columnas tiene la consulta
  • Recorrer la consulta obteniendo la columna por número
  • Guarda los datos en un array por ejemplo

Y ya si mano, tendrás que asignar el contenido de cada posición con el campo que le corresponda en Velneo.

En el caso que los campos tengan en el mismo nombre, lo que haría sería pasar ese array o un json a un proceso en javascript y recorrerlo haciendo registro.setField(campo, valor)

Lo que consigues es tener una parte común donde guardas la información en un array de Velneo y luego es ya si lo duro es pasarlo a cada campo de Velneo.