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