Importación Excel - v7

Gracias Paco , pero una de las ventajas que veo en este proceso de importacion es no tener que estar atento a la posicion de las columnas, de todas formas tomo nota de tu consejo e intentare buscar una solucion que publicare si doy con ella.

Un saludo.

Muchas gracias Paco, acabo de probarlo y funciona perfectamente.
Gran aporte

Buenos días Paco

Quería hacer una prueba de conexión por ODBC pero con tablas libre de Foxpro para probar si el rendimiento es mejor que importando desde un CSV. Estoy utilizando el siguiente código pero no me conecta:

BD: Crear manejador(hODBC,ODBC(compatible Microsoft SQL Server), “Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\temp\traspasovfp;Exclusive=No;Collate=Machine;NULL=NO;DELETED=YES;BACKGROUNDFETCH=NO;”,)
BD: Conectar(hODBC,l_OK,OK_MENSAJE)

Agradecería cualquier ayuda.

Un saludo

Gonzalo Torre

Hola Gonzalo.

En principio el String de conexión está correcto.
De todas formas ten en cuenta que el driver ODBC de Visual Foxpro es del año 1999 y eso es la prehistoria (ver adjunto).

Las tablas libres DBF no deben tener características incorporadas recientemente, como los campos Autoincrementables o los campos de Ancho variable.

Frente a CSV tenemos la ventaja de poder usar consultas SQL con toda la potencia que da eso.

Aunque hace años que no importo de tablas libres, para otras fuentes uso el siguiente esquema:

Rem ( Creamos el Manejador de la Base de Datos externa )
BD: Crear manejador ( bd_externa, ODBC (compatible Microsoft SQL Server), “Driver={Microsoft Visual
FoxPro Driver};SourceType=DBF;SourceDB=D:\Trabajos\datosdbf;Exclusive=No;Collate=Machine;NULL=NO;DELETED=YES;BACKGROUNDFETCH=NO;”, , , )
Rem ( Conectamos con la Base de datos externa )
Set ( OK_CONEXION, 0 )
BD: Conectar ( bd_externa, , , OK_CONEXION, OK_MENSAJE )
—Rem ( Si la conexión tiene éxito se ejecuta el subproceso. OK_CONEXION siempre devuelve 0 )
—Set ( OK_CONEXION, 1 )
—Rem ( Ejecutamos la consulta SQL )
—Set ( ODBC_CONSULTA_SQL, “SELECT * FROM tabla_dbf_estandar” )
—Mensaje ( "Se va a ejecutar la consulta: " + ODBC_CONSULTA_SQL, Información, , )
—BD: SQL ( bd_externa, ODBC_CONSULTA_SQL, ODBC_NUM_FILAS, 1 )
------Rem ( Subproceso en el que podemos gestionar los registros obtenidos en la consulta SQL )
------Rem ( ODBC_NUM_FILAS siempre devuelve -1 )
------Mensaje ( “Se ha ejecutado el comando " + ODBC_CONSULTA_SQL + " → " + ODBC_NUM_FILAS + " filas”, Información, , )
------Set ( ODBC_CONTADOR, 1 )
------BD: Recorrer lista ( bd_externa )
---------// Mensaje ( "Importando " + ODBC_CONTADOR, Información, 0.2, )
--------- …
If ( OK_CONEXION = 1 )
—Set ( OK_MENSAJE, “Se han importado " + numberToString(ODBC_CONTADOR, “L”, 0) + " registros”)
Else
—Set ( OK_MENSAJE, "Mensaje de conexión: " + OK_MENSAJE )
Mensaje ( OK_MENSAJE, Información, , )

Mira que error devuelve la conexión en la variable OK_MENSAJE.

Saludos
Paco Satué

image

Gracias Paco

Ahora me ha funcionado. Lo único que tenía diferente es que en la instruciión BD: SQL ( bd_externa, ODBC_CONSULTA_SQL, ODBC_NUM_FILAS, 1 ) no había puesto el último parámetro opcional. Supongo que sería eso.

Gracias y un saludo

Gonzalo Torre

Para gontorre
Hola como comentas que tienes que hacer a menudo importaciones de excel, te expongo
lo que me pasa para ver si me puedes aconsejar.
Tengo que importar 150 lineas y solo 4 celdas, resulta que a veces la importación en velocidad
es normal y otras veces es lentísima pero jugando contra el mismo fichero, es decir efectuo la importación y
le digo solo 10 lineas, la primera vez lentísima, repito y rápido, repito pero ahora con 30 lineas : rápido
repito con 90 lineas, resultado : muy lento, repito con 30 lineas: resultado rapido;
REPITO AUMENTANDO LINEAS A 140. RESULTADO MUY LENTO
A QUE PUEDE SER DEBIDO?
GRacias

Perdón que se me olvidaba y a todo esto el proceso es en local, no entiendo nada
Gracias

Hola blavan

A mi me pasa algo parecido cuando importo un CSV.

Tengo un fichero muy grande (unos 800 MB). Para importarlo tengo un proceso que va partiendo el fichero en trozos de 1000 líneas y luego otro proceso que importa cada uno de los trozos. De esta forma en lugar de tener una transacción enorme tengo muchas transacciones más pequeñas. El caso es que unos trozos tardan 6 o 7 segundos y otros trozos tardan más de un minuto cuando todos los trozos deberían ser más o menos iguales. En vAdmin veo 6 o 7 transacciones “cortas” y luego un “larga” y así.

La verdad no sé a qué puede ser debido.

Un saludo

Gonzalo Torre

Gracias

Buenos días

Utilizo este sistema para la carga de archivos de Excel y desde hace un par de días me aparece el siguiente error:

“El sistema operativo no está configurado para ejecutar esta aplicación”

Esto ha ocurrido de la noche a la mañana si haber cambiado nada en mi solución.

¿A alguien le ha ocurrido?

Gracias y un saludo

Me contesto a mi mismo.

He reinstalado el Access Database Engine y ya vuelve a funcionar.

image
Una pregunta para hacer una consulta de una hoja excel tienes que saber si o si el nombre o hay alguna manera de seleccionar la primera que se encuentre

Hasta donde yo he utilizado ese componente, si, tienes que conocer el identificador de la hoja que vas a importar pero es probable que Paco sepa hacer alguna maravilla para resolverlo.

Pues si eso esperaba porque yo por mas que he buscado en foros y la web no e encontrado como hacerlo .

Hola lsmsusvilla.

Creo que te lo has currado poco.
No tienes más que probar con "SELECT * FROM [A1:G100]" sin especificar nombre de Hoja.

Saludos
Paco Satué

No paco lo que pasa es que no te llego ni a la suela de los … y además me fui por el camino opuesto muchas gracias por tu atencion