martes, 16 de marzo de 2010

Generar un archivo CSV con los datos de un recordset ADO

Ejemplo 1

Ejemplo que utiliza el método GetString del objeto recordset de Ado para crear un archivo Csv a partir del contenido del recordset
Para obtener los datos con este método , solo hay que asignar a una variable String los datos devueltos por el método GetString
Al método GetString hay que indicarle el delimitador ( en este caso la coma ), y el salto de carro ( VbCrlf ) para los registros

Csv = Recordset.GetString(adClipString, -1, ",", vbCrLf, "(NULL)")

El siguiente ejemplo utiliza la base de datos Biblio.mdb que se instala con Visual basic. Luego llena un recordset con todos los registros de la tabla Authors, y genera el archivo csv en el Directorio c:\ con el nombre archivo.csv
Agregar la referencia Microsoft Ado

Código fuente en el formulario
  1. Option Explicit  
  2.   
  3. 'Función que exporta el recordset a un Archivo de texto csv separado por comas   
  4. '*********************************************************************************   
  5. Public Function Recordset_a_CSV(rs As ADODB.Recordset, Path_Csv As StringAs Boolean  
  6.     On Error GoTo errFunction   
  7.     Dim Datos_Csv As String  
  8.        
  9.     ' Devuelve los datos separados por comas y con un salto de carro   
  10.     Datos_Csv = rs.GetString(adClipString, -1, ",", vbCrLf, "(NULL)")   
  11.        
  12.     ' Abre y Crea un archivo de texto para escribir los datos   
  13.     Open Path_Csv For Output As #1   
  14.     ' escribe los datos   
  15.     Print #1, Datos_Csv   
  16.     'cierra   
  17.     Close   
  18.     ' Ok   
  19.     Recordset_a_CSV = True  
  20.   
  21. Exit Function  
  22. 'Error   
  23. errFunction:   
  24.   
  25. MsgBox Err.Description, vbCritical   
  26.   
  27. End Function  
  28.   
  29. Private Sub Form_Load()   
  30.        
  31.     Dim cnn As ADODB.Connection   
  32.     Dim Rst As ADODB.Recordset   
  33.     Dim R As Boolean  
  34.        
  35.     ' Nueva conexión Ado   
  36.     Set cnn = New ADODB.Connection   
  37.     cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source" & _   
  38.                             "=C:\Archivos de programa\Microsoft Visual " & _   
  39.                             "Studio\VB98\BIBLIO.MDB;Persist Security Info=False"  
  40.        
  41.     cnn.CursorLocation = adUseClient   
  42.     ' Abre la base de datos   
  43.     cnn.Open   
  44.     ' Nuevo recordset ADO   
  45.     Set Rst = New ADODB.Recordset   
  46.     ' Abre el recordset   
  47.     Rst.Open "Select * From Authors", cnn, adOpenStatic, adLockOptimistic   
  48.        
  49.     ' Llama a la función que genera el Csv con los datos del recordset   
  50.     R = Recordset_a_CSV(Rst, "c:\archivo.csv")   
  51.        
  52.     If R Then  
  53.         MsgBox " Se genró el archivo CSV correctamente ", vbInformation   
  54.     End If  
  55.        
  56.     ' Cierra el recordset , la conexión y descarga las variables   
  57.     If Not Rst.State = adStateOpen Then  
  58.         Rst.Close   
  59.     End If  
  60.        
  61.     If Not Rst Is Nothing Then  
  62.         Set Rst = Nothing  
  63.     End If  
  64.        
  65.     If Not cnn.State = adStateOpen Then  
  66.         cnn.Close   
  67.     End If  
  68.        
  69.     If Not cnn Is Nothing Then  
  70.         Set cnn = Nothing  
  71.     End If  
  72.        
  73. End Sub  
  74.    


Ejemplo 2

Este es otro ejemplo , pero a diferencia del anterior, para generar el archivo con los datos, se recorre el recordset fila a fila en un bucle.
La salida del archivo csv queda de la siguiente forma:

A la función se le debe enviar como argumento, el recordset y la ruta del .csv

Código fuente en el formulario
  1. Option Explicit  
  2.   
  3. ' función que recibe el recordset de ado, y el path del archivo csv   
  4. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
  5. Function Recordset_a_Csv(path As String, _   
  6.                          rs As Recordset) As Boolean  
  7.        
  8.        
  9.     On Error GoTo Err_function   
  10.        
  11.     Dim Columna   
  12.     Dim Fila As Integer  
  13.        
  14.     ' Crea el archivo csv   
  15.     Open path For Output As #1   
  16.     ' Se mueve al primer registro   
  17.     rs.MoveFirst   
  18.   
  19.     ' recorre todo el recordset   
  20.     For Fila = 0 To rs.RecordCount - 1   
  21.            
  22.         ' nombre del campo   
  23.         Print #1, Chr(34) & Trim(rs.Fields(0)) & Chr(34);   
  24.            
  25.         ' recorre todos los campos   
  26.         For Columna = 1 To rs.Fields.Count - 1   
  27.             ' imprime la fila actual en el fichero   
  28.             Print #1, "," & Chr(34) & Trim(rs.Fields(Columna)) & Chr(34);   
  29.         Next  
  30.            
  31.         ' escribe una línea en blanco   
  32.         Print ""  
  33.         ' salto de carro   
  34.         Print #1, Chr(13) & Chr(10);   
  35.            
  36.         ' mueve el recordset al siguiente registro   
  37.         rs.MoveNext   
  38.     Next  
  39.        
  40.     ' cierra el archivo csv   
  41.     Close #1   
  42.     Exit Function  
  43. Err_function:   
  44.        
  45.     MsgBox Err.Description, vbCritical   
  46.        
  47.     Close   
  48. End Function   

Y por ejemplo para llamarla:
  1. ' Objeto connection   
  2. Dim cn As New ADODB.Connection   
  3. ' Connectionstring   
  4. cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _   
  5.                       "Source=C:\Archivos de programa\Microsoft " & _   
  6.                       "Visual Studio\VB98\BIBLIO.MDB;Persist Security Info=False"  
  7.   
  8. ' Abre   
  9. cn.Open   
  10. ' Instancia el recordset   
  11. Dim rs As New Recordset   
  12. ' Le pasa la consulta sql   
  13. rs.Open "Select * from authors", cn, adOpenStatic, adLockOptimistic   
  14.   
  15. Call Recordset_a_Csv("c:\ejemplo.csv", rs)   

No hay comentarios:

Publicar un comentario