none
¿Cómo puedo editar estas líneas de código en VBA? RRS feed

  • Pregunta

  • Anteriormente alguien había realizado la programación de una subrutina para realizar una consulta en SQL con una macro; sin embargo, esta sólo aplicaba para un usuario específico en SQL.

    La programación era más o menos así:

    Sub Realizar_Consulta(Base_de_Datos As Variant, Hoja_Importacion As Variant, Sentencia_SQL As String, Sentencia_SQL_2 As String, Sentencia_SQL_3 As String, Sentencia_SQL_4 As String)

    'Esta subrutina realiza una consulta definida como parámetro de entrada a una base de datos que se encuentre en SQL

    Dim qt As QueryTable

    Application.ScreenUpdating = False

    'La siguiente instrucción setea la conexión ODBC
    connstring = "ODBC;DSN=SQL Server;UID=;PWD=;Database=" & Base_de_Datos

    'Las siguientes instrucciones realizan la conexión, ejecutan la consulta en SQL e importan el resultado
    Sheets(Hoja_Importacion).SELECT

    With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A5"), Sql:=Sentencia_SQL & Sentencia_SQL_2 & Sentencia_SQL_3 & Sentencia_SQL_4)
     .Refresh BackgroundQuery:=False
    End With

    End Sub

    Ahora bien, estoy intentando modificar el código, de manera que funcione para cualquier conexión a SQL

    Lo que he modificado va así:

    Sub Realizar_Consulta(Servidor As Variant, Usuario As Variant, Password As Variant, Base_de_Datos As Variant, Hoja_Importacion As Variant, Sentencia_SQL As String, Sentencia_SQL_2 As String, Sentencia_SQL_3 As String, Sentencia_SQL_4 As String)

    'Esta subrutina realiza una consulta definida como parámetro de entrada a una base de datos que se encuentre en SQL

    Dim qt As QueryTable

    Application.ScreenUpdating = False

    Dim Conect As Object

    On Error GoTo ErrorHandler

    Set Conect = CreateObject("ADODB.Connection")


    conexion = "Provider=SQLOLEDB.1;" & _
               "Password=" & Password & ";" & _
               "Persist Security Info=True;" & _
               "User ID=" & Usuario & ";" & _
               "Initial Catalog=" & Base_de_Datos & ";" & _
               "Data Source=" & Servidor
    Conect.ConnectionString = conexion

    Esta es la parte que no me funciona y que quiero ajustar

    'Las siguientes instrucciones realizan la conexión, ejecutan la consulta en SQL e importan el resultado
    Sheets(Hoja_Importacion).SELECT

    With ActiveSheet.QueryTables.Add(Connection:=Conect.ConnectionString, Destination:=Range("A5"), Sql:=Sentencia_SQL & Sentencia_SQL_2 & Sentencia_SQL_3 & Sentencia_SQL_4)
     .Refresh BackgroundQuery:=False
    End With

    Exit Sub

    ErrorHandler:

    MsgBox "ERROR: " & Err.Description, vbExclamation, "Gestor SQLServer"

    End Sub

    De antemano muchas gracias

    martes, 25 de agosto de 2015 22:07