• Domingo 22 de Diciembre de 2024, 20:39

Autor Tema:  Pasar de .mdb a .xls  (Leído 2492 veces)

alejos

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Pasar de .mdb a .xls
« en: Martes 6 de Octubre de 2009, 17:19 »
0
Hola a todos,

Estoy creando una aplicación en la que tengo que pasar los registros de una base de datos .mdb a un archivo de Excel .xls. En mi código ya consigo crear el archivo excel e introducir algunos registros en el archivo, pero tengo dos problemas.

El primero es que tras haber creado y guardado el archivo, me aparece correctamente en el directorio que ha elegido el usuario, pero al abrirlo con el excel siempre se me abre el fichero creado más otro llamado Libro1.xls que ni siquiera aparece en el directorio.

El segundo problema es que no consigo que se guarden todos los registros de la base de datos en el archivo excel. Para ello creo un bucle hasta encotrar el EOF del recordset. Dentro de este bucle (el principal) voy rellenando el fichero de excel por filas y columnas. Si en segundo bucle de las filas introduzco un valor máximo entero (5 o 6) funciona pero sólo me guarda los 5 o 6 "últimos" registros de la  base de datos. Además si pongo un numero mayor de 6 se me vuelve a colgar (la base de datos que tengo para pruebas contiene 30 registros). Debería recorrer el recordset hasta el total de registros (rs.RecordCount) que contiene, pero se me cuelga el programa.

Aquí os presento mi código: (fijaos que en la línea 34 el bucle for es hasta el valor 6 pero debería ir puesto rs.RecordCount)

Código: Visual Basic
  1.  
  2.  
  3.     Dim i As Long
  4.     Dim j As Long
  5.    
  6.     Dim xlApp As Excel.Application
  7.     Dim xlBook As Excel.Workbook
  8.     Dim xlSheet As Excel.Worksheet
  9.  
  10.     dbname = App.Path
  11.     If Right$(dbname, 1) <> "" Then dbname = dbname & ""
  12.     dbname = dbname & "DatosVueloDB.mdb"
  13.     Set db = OpenDatabase(dbname)
  14.  
  15.     ' Obtener los records o valores.
  16.     Set qdef = db.CreateQueryDef("", "SELECT * FROM Tabla")
  17.     Set rs = qdef.OpenRecordset(dbOpenSnapshot)
  18.      
  19.     Dialogo.DialogTitle = "Destino - Seleccione el archivo de destino"
  20.     Dialogo.Filter = "Archivos de Datos (*.csv)|*.csv |Archivo de Excel (*.xlsx)|*.xlsx"
  21.     Dialogo.ShowOpen
  22.  
  23.     Dialogo.FileName <> "" And Dialogo.FilterIndex = 2 Then
  24.      
  25.         Set xlApp = New Excel.Application
  26.         Set xlBook = xlApp.Workbooks.Add
  27.         Set xlSheet = xlBook.Worksheets.Add
  28.  
  29.         For i = 1 To rs.Fields.Count
  30.                xlSheet.Cells(1, i).Value = rs.Fields(i - 1).Name    'Relleno la primera fila del fichero excel con el nombre de los campos
  31.         Next i
  32.        
  33.         Do While Not rs.EOF
  34.             For j = 2 To 6    'rs.RecordCount                    ' empiezo a rellenar desde la segunda fila hasta el total de registros de la base de datos
  35.                  For i = 1 To rs.Fields.Count                      ' empiezo a llenar las columnas hasta el total de campos de la base de datos
  36.                       xlSheet.Cells(j, i).Value = rs.Fields(i-1).Value
  37.                  Next i
  38.                
  39.                 rs.MoveNext        'Siguiente registro
  40.             Next j
  41.         Loop
  42.  
  43.         xlSheet.SaveAs Dialogo.FileName          'guardo el fichero excel con el nombre del usuario
  44.        
  45.         xlApp.Quit                               'cierro todo, fichero y conexion de la base de datos
  46.         Set xlApp = Nothing
  47.         'Set xlBook = Nothing
  48.         Set xlSheet = Nothing
  49.         rs.Close
  50.         db.Close
  51.  
  52.  

Espero que podáis ayudarme. He mirado por todos los lados pero para pasar de .mdb a .xls hay poca información. Sólo encuentro información para hacer el paso contrario. Pero esto no me sirve.

Espero que me podáis ayudar. Muchas gracias por adelantado.

Saludos
Alejos