Abfragen eines SQL Servers in Excel mit einer parametrisierten Abfrage unter Verwendung von VBA

Ich versuche, eine Tabelle in Microsoft Excel mit VBA abzufragen. Ich habe Code geschrieben, um diese Aufgabe auszuführen, aber es wird immer wieder der Laufzeitfehler "1004" angezeigt, der besagt, dass es sich um einen allgemeinen ODBC-Fehler handelt. Ich bin nicht sicher, was ich tun muss, damit dieser Code ordnungsgemäß ausgeführt wird, damit ich diese Tabelle abfragen kann.

Ich verwende SQL Server Express, den Server, zu dem ich eine Verbindung herstelle:.\SQLEXPRESS

Datenbank:

Datenbanklink

Abfrage der Produkttabelle VBA-Code:

Sub ParameterQueryExample()
'---creates a ListObject-QueryTable on Sheet1 that uses the value in 
'        Cell Z1 as the ProductID Parameter for an SQL Query
'        Once created, the query will refresh upon changes to Z1. 

Dim sSQL As String
Dim qt As QueryTable
Dim rDest As Range


'--build connection string-must use ODBC to allow parameters
Const sConnect = "ODBC;" & _
    "Driver={SQL Server Native Client 10.0};" & _
    "Server=.\SQLEXPRESS;" & _
    "Database=TSQL2012;" & _
    "Trusted_Connection=yes"


'--build SQL statement
sSQL = "SELECT *" & _
        " FROM TSQL2012.Production.Products Products" & _
        " WHERE Products.productid = ?;"


'--create ListObject and get QueryTable
Set rDest = Sheets("Sheet1").Range("A1")
rDest.CurrentRegion.Clear  'optional- delete existing table


Set qt = rDest.Parent.ListObjects.Add(SourceType:=xlSrcExternal, _
    Source:=Array(sConnect), Destination:=rDest).QueryTable


'--add Parameter to QueryTable-use Cell Z1 as parameter
With qt.Parameters.Add("ProductID", xlParamTypeVarChar)
    .SetParam xlRange, Sheets("Sheet1").Range("Z1")
    .RefreshOnChange = True
End With


'--populate QueryTable
With qt
    .CommandText = sSQL
    .CommandType = xlCmdSql
    .AdjustColumnWidth = True  'add any other table properties here
    .BackgroundQuery = False
    .Refresh
End With


Set qt = Nothing
Set rDest = Nothing
End Sub

Antworten auf die Frage(1)

Ihre Antwort auf die Frage