ejecutar consulta sql desde excel

Upload: felixdavidleiva6520

Post on 06-Mar-2016

220 views

Category:

Documents


0 download

DESCRIPTION

CONSULTAR SQL DESDE EXCEL

TRANSCRIPT

Ejecutar consulta SQL desde ExcelBYSERGIO ALEJANDRO CAMPOS 8 NOVEMBER, 2011Hace algunos das me surgi la necesidad de extraer datos de unas bases de SQL a Excel, a lo cual me di a la tarea de buscar informacin al respecto. Cul fue mi sorpresa que no existe mucha informacin al respecto. Encontr un ejemplo de ejecutar consulta SQL desde Excel del cual tom el cdigo que realiza la funcin y adecu un formulario para que sea ms amigable la consulta.Cmo funciona?El ejemplo funciona si se tiene una cadena de conexin a SQL, y aunque no est probado para MySql no dudo que tambin funcione, slo modificando la cadena.Se muestra un formulario donde se especifica el nombre del servidor, de la base de datos, as como el usuario y la contrasea, adems de un espacio para se que introduzca la sentencia SQL a ejecutar.

ConsideracionesSe requieren conocimientos bsicos de SQL para armar la consulta, as como un servidor SQL local o en red.CdigoPrivate Sub CommandButton1_Click()'Llamas la funcin EjecutarCells.ClearContentsCall Ejecutar(Sheets(2).Range("consulta"), "Hoja1")End SubFunction Ejecutar(Sql As String, Hoja As String) On Error GoTo ErrorHandler Dim cn As Object ' crea un objeto Connection Set cn = CreateObject("ADODB.Connection") ' IMPORTANTE: Indicar la cadena de conexin a usar servidor = Sheets(2).Range("servidor") base = Sheets(2).Range("base") Usuario = Sheets(2).Range("usuario") pass = Sheets(2).Range("pass") Conexion = "Provider=SQLOLEDB.1;" & _ "Password=" & pass & ";" & _ "Persist Security Info=True;" & _ "User ID=" & Usuario & ";" & _ "Initial Catalog=" & base & ";" & _ "Data Source=" & servidor 'cn.ConnectionString = "Provider=SQLOLEDB.1;Password=s3cr3t0;Persist Security Info=True;User ID=sa;Initial Catalog=Cobranza;Data Source= 192.168.2.6" cn.ConnectionString = Conexion ' verifica que los parmetros no estn vacios If Sql vbNullString And Hoja vbNullString Then ' variable para al rec de ado Dim rst As Object ' abre la conexin a la base de datos cn.Open ' crea un nuevo objeto recordset Set rst = CreateObject("ADODB.Recordset") ' Ejecuta el sql para llenar el recordset rst.Open Sql, cn, 1, 3 ' variables para los indices de las filas y columnas c = 0 f = 0 ' recorre las columnas, aade el nombre del campo al encabezado For i = 0 To rst.Fields.Count - 1 Sheets(1).Range(Chr(i + 65) & f + 1).Value = rst.Fields(i).Name Next f = f + 1 ' recorre todo el recordset hasta el final Do While Not rst.EOF ' recorre los campos en el registro actual del recordset para recuperar el dato For i = 0 To rst.Fields.Count - 1 ' aade el valor a la celda Sheets(1).Range(Chr(c + 65) & _ f + 1).Value = rst.Fields(c) c = c + 1 Next ' resetea el indice de las columnas c = 0 ' Referencia al registro actual (incrementa ) f = f + 1 ' Siguiente registro rst.MoveNext Loop ' cierra y descarga las referencias On Error Resume Next rst.Close cn.Close Set cn = Nothing Set rst = Nothing End If Call Macro1 Exit FunctionErrorHandler: MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "EXCELeINFO"End Function