Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Duda con importación de datos en VB6

Estas en el tema de Duda con importación de datos en VB6 en el foro de Visual Basic clásico en Foros del Web. Hola buenas tardes, Nuevamente con una duda en cuestión de VB6 . Estoy haciendo un programita para importar datos de un archivo de Excel a ...
  #1 (permalink)  
Antiguo 27/08/2009, 16:35
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Duda con importación de datos en VB6

Hola buenas tardes,

Nuevamente con una duda en cuestión de VB6. Estoy haciendo un programita para importar datos de un archivo de Excel a una base de datos de Access.

El programa tiene dos frames, el primero ya funciona correctamente, pero en el segundo, tengo un ListBox y un Botón (llamado btnImportar). En el botón Importar tengo el siguiente código:

Código:
Private Sub btnImportar_Click()


Call Excel_a_Access(App.Path & "D:\Sistema Registro Escolar\Diseño Sistema\BD\Registros.mdb", _
                    App.Path & "\ejemplo.xls", _
                    "Alumnos", 10, 10)
    
End Sub
Y tengo dos funciones adicionales:

Código:
Private Sub Excel_a_Access(Path_BD As String, _
                           Path_XLS As String, _
                           La_Tabla As String, _
                           Filas As Integer, _
                           Columnas As Integer)


Dim Obj_Excel As Object
Dim Obj_Hoja As Object
Dim cn_Ado As ADODB.Connection
Dim rst_Ado As ADODB.Recordset
Dim Fila_Actual As Integer
Dim Columna_Actual As Integer
Dim Dato As Variant

    Screen.MousePointer = vbHourglass

    'Nueva instancia de Excel
    Set Obj_Excel = CreateObject("Excel.Application")

    ' Abre el libro de Excel
    Obj_Excel.Workbooks.Open FileName:=Path_XLS

    ' si es la versión de Excel 97, asigna la hoja activa ( ActiveSheet )
    If Val(Obj_Excel.Application.Version) >= 8 Then
        Set Obj_Hoja = Obj_Excel.ActiveSheet
    Else
        Set Obj_Hoja = Obj_Excel
    End If
    
    'Abre una nueva conexión Ado
    Set cn_Ado = New ADODB.Connection
    
    ' Cadena de conexión
    cn_Ado.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                              "Data Source=" & Path_BD & ";" & _
                              "Persist Security Info=False"
    
    On Error Resume Next
    ' Abre la base de datos
    cn_Ado.Open
    
    'Nuevo objeto recordset
    Set rst_Ado = New ADODB.Recordset
    
    'Abre el recordset
    rst_Ado.Open "Select * FROM " & La_Tabla, _
                  cn_Ado, adOpenStatic, adLockPessimistic
    
    'Se posiciona al final    If rst_Ado.RecordCount <> 0 Then rst_Ado.MoveLast
    ' Recorre las filas y columnas de la hoja
    For Fila_Actual = 1 To Filas
        'Nuevo registro
        rst_Ado.AddNew
        For Columna_Actual = 0 To Columnas - 1
        
            ' Va leyendo los datos de la celda indicada
            Dato = Trim$(Obj_Hoja.Cells(Fila_Actual, Columna_Actual + 1))
            
            'Agrega los datos al campo indicado
            rst_Ado(Columna_Actual).Value = Dato

        Next
    Next
    
    Call Descargar_Objetos(rst_Ado, cn_Ado, Obj_Excel, Obj_Hoja)
    Screen.MousePointer = vbDefault
    MsgBox " Datos copiados ", vbInformation

Exit Sub

'Error
ErrSub:

Call Descargar_Objetos(rst_Ado, cn_Ado, Obj_Excel, Obj_Hoja)
MsgBox Err.Description, vbCritical
Screen.MousePointer = vbDefault
    
End Sub
Código:
Sub Descargar_Objetos(rst_Ado As ADODB.Recordset, cn_Ado As ADODB.Connection, _
                                      Obj_Excel As Object, Obj_Hoja As Object)

    
    Set rst_Ado = Nothing
    cn_Ado.Close
    Set cn_Ado = Nothing
    Obj_Excel.ActiveWorkbook.Close False
    Obj_Excel.Quit
    Set Obj_Hoja = Nothing
    Set Obj_Excel = Nothing

End Sub
Al parecer todo funcioona bien, ya que ejecuto el programa y no me envía algún mensaje de error. Sin embargo, cuando abró la base de datos para ver si en verdad se guardó la información, me encuentro con que está vacía

Ya verifiqué que los direccionamientos estén correctos, ya habilité el DAO Library 2.6 o 2.8. Uso Visual Basic 6 y el archivo de Excel está en la versión 2003.

Ahora, sólo como informativo: Tengo en el frame1, un listbox y un botón, que funcionan de la siguiente manera: en el listbox selecciono sólo archivos de texto (el archivo de texto contiene información en lineas, los campos están separados por una coma), al pulsar el botón, convierte el archivo en archivo de Excel (v 2003) que es el que uso para el frame2. El paso de conversión lo hace correcto, verifico el archivo de excel y es creado correctamente.

Algo más, en la carpeta donde reciden los archivos me creo un archivo tipo LOG, que dice lo siguiente:

Cita:
Línea 198: la clase MSAdodcLib.Adodc del control Adodc1 no era una clase de control cargada.
Línea 203: el nombre de la propiedad _ExtentX de Adodc1 no es válido.
Línea 204: el nombre de la propiedad _ExtentY de Adodc1 no es válido.
Línea 205: el nombre de la propiedad ConnectMode de Adodc1 no es válido.
Línea 206: el nombre de la propiedad CursorLocation de Adodc1 no es válido.
Línea 207: el nombre de la propiedad IsolationLevel de Adodc1 no es válido.
Línea 208: el nombre de la propiedad ConnectionTimeout de Adodc1 no es válido.
Línea 209: el nombre de la propiedad CommandTimeout de Adodc1 no es válido.
Línea 210: el nombre de la propiedad CursorType de Adodc1 no es válido.
Línea 211: el nombre de la propiedad LockType de Adodc1 no es válido.
Línea 212: el nombre de la propiedad CommandType de Adodc1 no es válido.
Línea 213: el nombre de la propiedad CursorOptions de Adodc1 no es válido.
Línea 214: el nombre de la propiedad CacheSize de Adodc1 no es válido.
Línea 215: el nombre de la propiedad MaxRecords de Adodc1 no es válido.
Línea 216: el nombre de la propiedad BOFAction de Adodc1 no es válido.
Línea 217: el nombre de la propiedad EOFAction de Adodc1 no es válido.
Línea 218: el nombre de la propiedad ConnectStringType de Adodc1 no es válido.
Línea 222: el nombre de la propiedad Orientation de Adodc1 no es válido.
Línea 224: el nombre de la propiedad Connect de Adodc1 no es válido.
Línea 225: el nombre de la propiedad OLEDBString de Adodc1 no es válido.
Línea 226: el nombre de la propiedad OLEDBFile de Adodc1 no es válido.
Línea 227: el nombre de la propiedad DataSourceName de Adodc1 no es válido.
Línea 228: el nombre de la propiedad OtherAttributes de Adodc1 no es válido.
Línea 229: el nombre de la propiedad UserName de Adodc1 no es válido.
Línea 230: el nombre de la propiedad Password de Adodc1 no es válido.
Línea 231: el nombre de la propiedad RecordSource de Adodc1 no es válido.
Línea 232: el nombre de la propiedad Caption de Adodc1 no es válido.
Línea 242: el nombre de la propiedad _Version de Adodc1 no es válido.
Tal véz estoy usando un método errónea o la lógica no es la adecuada, que creen que sea?

Saludos a todos.
  #2 (permalink)  
Antiguo 29/08/2009, 19:08
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Duda con importación de datos en VB6

Hola, por lo que veo estas usando ADO, no DAO como comentas...esos logs borralos, capaz te quedaron de antes cuando ocurrio un error, si no te vuelven a salir no hay problema, pero si usas ADO no debes marcar DAO Library 2.6, sino Microsoft Active Data Objets 2.xx, y si tenes algun control Adodc por ahi sacalo no necesitas controles para manejar los recordset y demas...

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #3 (permalink)  
Antiguo 31/08/2009, 08:23
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Duda con importación de datos en VB6

Cita:
Hola, por lo que veo estas usando ADO, no DAO como comentas...esos logs borralos, capaz te quedaron de antes cuando ocurrio un error, si no te vuelven a salir no hay problema, pero si usas ADO no debes marcar DAO Library 2.6, sino Microsoft Active Data Objets 2.xx, y si tenes algun control Adodc por ahi sacalo no necesitas controles para manejar los recordset y demas...
Perdón fue error de dedo, son ADO los que estoy utilizando
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:40.