Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: FranciskoAsdf en 15 Diciembre 2014, 23:57 pm



Título: Importar datos desde Excel a Access con Vb6.0
Publicado por: FranciskoAsdf 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.

(http://i60.tinypic.com/2i26jxi.jpg)

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.


Título: Re: Importar datos desde Excel a Access con Vb6.0
Publicado por: MCKSys Argentina 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!


Título: Re: Importar datos desde Excel a Access con Vb6.0
Publicado por: silver_axe007 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 & ")"

 


Título: Re: Importar datos desde Excel a Access con Vb6.0
Publicado por: FranciskoAsdf 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!