Como importar datos de una hoja de calculo excel a una BD sql

Iniciado por cbr20, 17 Mayo 2013, 19:11 PM

0 Miembros y 1 Visitante están viendo este tema.

cbr20

Hola foro, ¿que tal?

Pues les venia con esta duda:
- Tengo un proyecto en vb.net (usando visual studio 2010 para mas informacion), que usa una base de datos enorme (1GB de datos, para mi eso es enoooorme) en mysql. Pues lo que hace la aplicaion es "importar" los datos de la hoja de calculos y ponerlos en una tabla.

Tonto no soy (por ahora, jaja, el día de mañana no se que será de mí) asi que he hecho que los campos de la tabla de la base de datos coincida con los nombres de los campos en la hoja de calculo (mas que nada para que coincida).

Bueno, pues mi duda es: ¿como hago yo para que mediante un metodo en vb.net la tabla de la base de datos coja los datos de la hoja de calculo excel?

Les dejo un poco de mi codigo para que asi puedan orientarse mejor (y poder ayudarme con más eficiencia, como no, una imagen vale mas que mil palabras).

Antes de nada unas premisas: tengo una clase vb que realiza la conexion a la base de daatos y otra que realiza los metodos pertinentes para controlarla etc, resumiendo, que el control de la BD esta echo, lo que necesito saber es como (que codigo sql y añadidos de vb.net necesarios para su funcionamiento) importar estos datos.

'El objeto objHojita es para controlar la clase de control BD
'Importar es el metodo que se encargara de importar los datos (por lo visto no me dara un derrame cerebral inventando nombres, eh?), y lo que hago es pasarle la ruta del archivo excel por un textbox, una tabla que contendra datos de forma temporal ("Altas") y una tabla que contendra los datos de forma mas permanente ("TAltas").

objHojita.Importar(txtRutaArchivo.Text, "Altas", "TAltas")

'Y la clase de control de BD, el metodo de importacion es este:


Sub Importar(ByVal excel, ByVal hoja, ByVal destino)

Try
'MyBase es el objeto para la conexion en profundo con la BD (trankis, funciona de maravilla)
MyBase.AbrirConexion()
Àqui empieza lo gordo. Esta linea de debajo, la variable connect, se supone que deberia contener la ruta del archivo y algo mas (no se el que, pero me han dicho que lo ponga asi, la ruta mas lo otro)
Connect = "'" + excel + "' 'Excel 8.0;HDR=Yes;IMEX=1;'"
'Y esta linea en un principio lo que hace es que pilla los datos, los mete en la tabla "destino" ("TAltas"), y luego copia los datos de la tabla destino en la tabla hoja ("Altas"). El caso es que falla.
MyBase.IniciarComando("INSERT INTO `" + hoja + "` SELECT * FROM `" + destino + "` IN `" + Connect + "`")
MyBase.InicioTransaccion()
MyBase.EjecutarComandoTR()
MyBase.AceptarTrasancion()
Catch ex As Exception
MessageBox.Show(ex.Message)
MyBase.RechazarTrasancion()
End Try
MyBase.CerrarConexion()
End Sub

Vale, asi lo he intentado hacer. Solucion que propongo: importar los datos de la hoja de calculo a la tabla destino ("TAltas") y luego ya si eso los copio en la otra.

En definitiva: no funciona como yo lo hago.
Asi que: ¿como hago para importar los datos de un excel a una tabla BD?

Solo necesito la sintaxis, llevarlo a .net ya me encargo yo.
Y lo siento si molesto a alguien poniendo este tema en esta zona del foro, es uqe no sabia si ponerlo en vb.net o en la zona sql.

Muchas gracias por su presencia y por sus aportaciones.

Por cualquier duda cosultadme aqui en el foro.

el-brujo

CitarAsi que: ¿como hago para importar los datos de un excel a una tabla BD?

en vb.net ni idea, pero lo puedes hacer directamente, puedes exportar el fichero excel en formato csv, separado por , o " cada campo y eso luego lo puedes importar a mysql sin problemas.

Creas la tabla en mysql y cada campo que coincida con la separación campo1,campo2,campo3 y marchando.

cbr20

Estoo, vale, ok, de acuerdo, buena idea.

Pero hay un problemilla. ¿como lo importo?
Es que esa era mi pregunta a fin de cuentas, jaja   ;D

el-brujo

jajaj si esa era la duda.

con el phpmyadmin mismo puedes importar ficheros csv, no hace falta ni usar el load data.

Yo lo he hecho con el webmin:


   
CitarSelect a text data file to import into MySQL database ..
This file must contain one database record per line, with the fields in either tab separated or CSV format.

Text file import options
Text file source    
From local file    
From uploaded file    
Table to import data into    
Delete data in table first?    Yes No
Ignore duplicate rows?    Yes No
File format    CSV with quotes CSV without quotes Tab separated
Character set for data    

cbr20

Gracias tio, en serio gracias, un colega mio tenia un problema parecido al mio e hizo lo que has puesto (no me entere de nada de lo que me dijo, como tampoco sabe dl tema XD), pero yo sigo igual.

Haber si lo he entendido: ¿Importo directamente el excel a la BD desde phpmyadmin (el cual he usado en mas de una ocasion)?

Verás, lo que necesito más que nada es sintaxis de sql. La importacion sera dinamica (el usuario es el que decide cuando se realizara la importacion, ya que el excel sera distinto segun el usuario que lo utilice)

Vamos, que lo unico que necesito es conocer la sintaxis sql que realice la imprtacion.

cbr20

Hola, ¿que tal familia?, ¿bien?, me alegro mucho.

Pues gracias a seguir rebuscando por ahi encontre un sitio donde exponen sintaxis sql que realiza dicha importacion de datos.

Aqui les dejo el link:
http://www.programasdesergio.somee.com/Apuntes/SQL/015SQL.html

Y gracias a el-brujo por sus aportaciones.

Pero aun (si, todavía da problemas la sintaxis) hay un problema.

Al ejecutar el codigo, salta un error en la sintaxis sql (Error en sintaxis sql, se esperaba "Select", "Delete", "Update" etc). En fin, que el codigo sql que les voy a exponer se supone que deberia importar los datos de un excel a una tabla de sql:

LOAD DATA INFILE `RutaExcel` INTO TABLE `Tabla1` FIELDS TERMINATED BY `;` (Campo1, Campo2, Campo3);

¿Esta bien escrito? ¿el Fields Terminated by `;` es con un ; para el caso de un excel?

¿Alguna sugerencia?

De antemano, gracias.

cbr20

LOAD DATA INFILE `C:\Users\Usuario1\Desktop\Archivito.csv` INTO TABLE `tablaparaexcel` FIELDS TERMINATED BY `;` (campo1, campo2)

Este es mi codigo sql que deberia realizar la importacion de un excel (convertido a cvs "separado por comas") y que solo tiene dos columnas (todo coincide).

Pero al ejecutar este comando mysql salta y da un error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`C:\Users\Usuario1\Desktop\Archivoto.csv` INTO TABLE `tablaexcel` FIELDS TERMINATED BY `' at line 1

Haber si alguine versado en sql y en mysql puede ayudarme.

cbr20

Buenas noticias (y malas). La sintaxis de antes solucionada (no era nada) pero ha surgido un problemon....

Resulta que no puedo realizar select into cuando se trata de control de BD en vb.net.

Tengo que usar ado.net para pasar datos excel a access.

¿Pero, como hago eso?

Hay que tener en cuenta que el excel es de varias paginas.

De antemano, gracias