Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/08/2009, 16:35
Avatar de Middrel
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.