elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Importar datos desde Excel a Access con Vb6.0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Importar datos desde Excel a Access con Vb6.0  (Leído 7,717 veces)
FranciskoAsdf

Desconectado Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
Importar datos desde Excel a Access con Vb6.0
« en: 15 Diciembre 2014, 23:57 pm »

Hola estimados,

Vengo a solicitar su ayuda para intentar resolver un problema que me tiene de cabeza, literalmente xD!

El tema es "super simple", quiero importar datos desde una planilla Excel a una tabla en Access, PERO no me funciona y no puedo saber porque.

Para intentar esclarecer un poco y me puedan entender, estos son los archivos que uso.

Una planilla Excel, donde los datos están distribuidos en 6 columnas sin formato (no es un archivo CSV). Probé poniendo el mismo nombre de los campos que en la base de datos, pero no funcionó.
Código:
168914	asdf	28/11 	 30/11	4.890	3990
132112 asdf 28/11 30/11 4.890 40% DCTO
149955 asdf 28/11 30/11 4.890 40% DCTO
149956 asdf 28/11 30/11 4.890 40% DCTO
178377 asdf 28/11 30/11 4.890 40% DCTO
178379 asdf 28/11 30/11 4.890 40% DCTO
178380 asdf 28/11 30/11 4.890 40% DCTO
185147 asdf 28/11 30/11 4.890 40% DCTO
197620 asdf 28/11 30/11 4.890 40% DCTO
208424 asdf 28/11 30/11 4.890 40% DCTO

Y la base de datos Access.



Y el código que tengo para hacerlo es el siguiente:
Código
  1. Option Explicit
  2.  
  3. Private Sub cmdLoad_Click()
  4. Dim excel_app As Object
  5. Dim excel_sheet As Object
  6. Dim db As Database
  7. Dim new_value As String
  8. Dim row As Integer
  9.  
  10.    Screen.MousePointer = vbHourglass
  11.    DoEvents
  12.  
  13.    Set excel_app = CreateObject("Excel.Application")
  14.  
  15. '    excel_app.Visible = True
  16.  
  17.    excel_app.Workbooks.Open FileName:=txtExcelFile.Text
  18.  
  19.    If Val(excel_app.Application.Version) >= 8 Then
  20.        Set excel_sheet = excel_app.ActiveSheet
  21.    Else
  22.        Set excel_sheet = excel_app
  23.    End If
  24.  
  25.    Set db = OpenDatabase(txtAccessFile.Text)
  26.  
  27.    row = 1
  28.    Do
  29.  
  30.        new_value = Trim$(excel_sheet.Cells(row, 1))
  31.  
  32.        If Len(new_value) = 0 Then Exit Do
  33.  
  34.        db.Execute "INSERT INTO BDOfertas VALUES (" & new_value & ")" ' ACA ES DONDE ME MARCA AL MOMENTO DE MOSTRAR EL ERROR EN TIEMPO DE EJECUCION. (LINEA 34)
  35.  
  36.        row = row + 1
  37.    Loop
  38.  
  39.    db.Close
  40.    Set db = Nothing
  41.  
  42.  
  43.    excel_app.Quit
  44.    Set excel_sheet = Nothing
  45.    Set excel_app = Nothing
  46.  
  47.    Screen.MousePointer = vbDefault
  48.    MsgBox "Copied " & Format$(row - 1) & " values."
  49. End Sub
  50.  
  51. Private Sub Form_Load()
  52. Dim file_path As String
  53.  
  54.    file_path = App.Path
  55.    If Right$(file_path, 1) <> "\" Then file_path = file_path & "\"
  56.    txtExcelFile.Text = file_path & "TEST.xls"
  57.    txtAccessFile.Text = file_path & "CLLBD.mdb"
  58. End Sub
  59.  

Y el error que obtengo es el siguiente:

Código:
Error '3346' en tiempo de ejecución:

El número de valores de consulta y el número de campos de destino son diferentes.


He intentado con muchos códigos hacer lo que quiero, pero nada parece funcionar, o yo lo estoy haciendo mal. Solo me falta esto para terminar este formulario del proyecto, pero no se como solucionarlo.


Atento a comentarios,
Atte.
Francisko.


En línea

Asdf debería ser algún tipo de función.
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.517


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Importar datos desde Excel a Access con Vb6.0
« Respuesta #1 en: 16 Diciembre 2014, 00:22 am »

Hola!

Tienes en cuenta que una consulta SQL INSERT tiene el siguiente formato (ejemplo)?

Código:
INSERT INTO Tabla (Campo1, Campo2, Campo3, Campo4) VALUES ('Valor1','Valor2','Valor3','Valor4'); 

Revisa tu código, porque todo indica que estás haciendo mal la consulta...

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

silver_axe007

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Importar datos desde Excel a Access con Vb6.0
« Respuesta #2 en: 17 Diciembre 2014, 16:02 pm »

La respuesta es Sencilla ... cuando haces el Insert la tabla tiene 6valores y eso  espera que en values le pongas varios valores (numero de columnas) pero solo le envias una

espero te ayude.

"INSERT INTO BDOfertas VALUES (" & new_value & ")"

cuando deberia ser

"INSERT INTO BDOfertas VALUES (" & new_value1 & ", " &  new_value2 & ", " &  new_value3 & ", " &  new_value4 & ", " &  new_value5 & ", " &  new_value6 & ")"

 
En línea

FranciskoAsdf

Desconectado Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
Re: Importar datos desde Excel a Access con Vb6.0
« Respuesta #3 en: 25 Diciembre 2014, 20:21 pm »

Hola, sorry por la respuesta tan tarde, pero aunque si intente de la forma que me dices Silver_axe007 no me funcionó.
Al final lo pude hacer, con un poco de ayuda de Google.

Dejo el codigo por si a alguien mas le sirve.

Código
  1. Ooption Explicit
  2. Dim NewDB As Database
  3. Dim NewTable As TableDef
  4. Dim DBName As String
  5. Dim dbnm As String
  6. Dim db As Database
  7. Dim rs As DAO.Recordset, nofld As Integer, norecd As Integer
  8. Dim J As Long
  9.  
  10.  
  11.      Set db = OpenDatabase(App.Path & "\DataAndStuff\" & dbnm)
  12.      Set rs = db.OpenRecordset("BDOfertas")
  13.      Do While Len(ExcelApp.ActiveSheet.Cells(i, 1).Value) <> 0
  14.         J = 1
  15.         rs.AddNew
  16.         Do While Len(ExcelApp.ActiveSheet.Cells(i, J).Value) <> 0
  17.            rs.Fields(J - 1).Value = ExcelApp.ActiveSheet.Cells(i, J).Value
  18.            J = J + 1
  19.         Loop
  20.         rs.Update
  21.         i = i + 1
  22.      Loop
  23.  
Saludos!
En línea

Asdf debería ser algún tipo de función.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines