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:
Y tengo dos funciones adicionales: 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
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:
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 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

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:
Tal véz estoy usando un método errónea o la lógica no es la adecuada, que creen que sea?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.
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.
Saludos a todos.