Я пытаюсь обновить старый лист excel, который использует QueryTables для подключения к Microsoft SQL Server.Как превратить соединение QueryTable в соединение ADODB?
работает следующим образом:
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=[dbname];UID=[name];PWD=[pass];APP=Microsoft Office 2003;WSID=[machine name];DATABASE=[dbname];AutoTranslate=No;QuotedId=No;AnsiNPW=No" _
, Destination:=Range("A20"))
.CommandText = Array("[a valid query]")
Есть некоторые более сложные вещи, которые я хочу, чтобы иметь возможность делать с информацией, это QueryTable становится все, но я получаю следующее сообщение об ошибке:
Run-time error '-2147467259 (80004005)': [DBNETLIB][ConnectionOpen (Invalid Instance()).]Invalid connection.
со следующим кодом:
Private SqlConn As ADODB.Connection
Private Sub InitiateSqlConn(Optional User As String, Optional Pass As String, Optional Server As String, Optional DB As String)
If SqlConn Is Nothing Then
Dim strConn As String
Set SqlConn = New ADODB.Connection
If IsNull(User) Or IsEmpty(User) Or User = "" Then
User = "[user]"
End If
If IsNull(Pass) Or IsEmpty(Pass) Or Pass = "" Then
Pass = "[pass]"
End If
If IsNull(Server) Or IsEmpty(Server) Or Server = "" Then
Server = "[ServerName]"
End If
If IsNull(DB) Or IsEmpty(DB) Or DB = "" Then
DB = "[DBName]"
End If
strConn = "Provider=SQLOLEDB;Data Source=" & Server & ";Initial Catalog=" & DB & ";"
SqlConn.Open "Provider=SQLOLEDB;Data Source=[SeverName];Initial Catalog=[DBName];Trusted_connection=yes;", "[User]", "[Pass]"
End If
End Sub
Public Sub QueryInto(QR As String, ByRef RS As ADODB.Recordset, Optional User As String, Optional Pass As String, Optional Server As String, Optional DB As String)
InitiateSqlCon User, Pass, Server, DB
RS.Open QR, SqlConn
End Sub
Я также попытался:
SqlConn.Open "Driver={SQL Server};Server=[SeverName];Database=[DBName];UID=[User];PWD=[Pass];"
И я получаю следующее сообщение об ошибке:
Run-time error '-2147467259 (80004005)': [Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.
Ошибки всегда возникают на SqlConn.Open.
Как получить соединение, установленное с помощью QueryTable, которое должно быть установлено как ADODB.Connection объект?
Я думаю, что «UserId» и «Password» должны быть «UID» и «PWD» соответственно. Я продолжаю получать: «Ошибка времени выполнения» -2147467259 (80004005) »: [DBNETLIB] [ConnectionOpen (Invalid Instance()).] Недействительное соединение." Мне нравится vbnullstring намного лучше. Моя студия Microsoft SQL Server Management подключается через проверки подлинности Windows, поэтому я пытаюсь сделать доверенное соединение. Древняя функциональная линия кода была сделана до того, как это произошло. – neogeek23
@ neogeek23 - 'Uid' и' Pwd' являются только параметрами, если вы используете '{SQL Server}'. 'UserId' и' Password' являются параметрами, если вы используете 'SQLOLEDB'. – Comintern
С этими параметрами я получаю сообщение об ошибке «Invalid connection string attribute», тогда как с UID и PWD я этого не делаю? Может, я где-то использую что-то не так? – neogeek23