运行 SQL 查询来自 VBA

Run SQL Query From VBA

我正在使用此语法从 Excel 2013 运行 SQL Server 2008 存储过程。一切都在一台 PC 上按应有的方式执行,但如果我尝试 运行 它在第二台 PC 上出错并显示

OLEDB Connection error

因为我正在对服务器名、用户名和密码进行硬编码,语法 运行 w/o 不应该在任何 PC 上出现问题吗?

Function RunSQLServerProc()
Dim con As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Set con = New ADODB.Connection
Set cmd = New ADODB.Command
Set rs = New ADODB.Recordset
con.Open "Provider=SQLOLEDB;Data Source=Server;Initial Catalog=Database;User Id=userid;Password=password;Integrated Security=SSPI;Trusted_Connection=Yes;"
cmd.ActiveConnection = con
cmd.CommandText = "TestProc"
Set rs = cmd.Execute(, , adCmdStoredProc)
End Function

有两种方式可以通过VBA
连接到SQL服务器 1) 集成安全性=SSPI;
2) 通过 VBA

提供有效的用户名和密码

当您使用 SSPI 时,将使用已登录用户(即 Excel 工作簿)的 windows 登录凭据。

现在为您服务,因为您不想使用 windows 凭据,您需要使用您指定的用户 ID 和密码提供 SQL 服务器登录,并且还必须与数据库中具有您所需权限的帐户。

这两个示例非常适合我。

Option Explicit

Sub CallSprocOne()

Dim con As Connection
Dim rst As Recordset
Dim strConn As String

Set con = New Connection
strConn = "Provider=SQLOLEDB;"
strConn = strConn & "Data Source=LAPTOP\SQL_EXPRESS;"
strConn = strConn & "Initial Catalog=Northwind;"
strConn = strConn & "Integrated Security=SSPI;"

con.Open strConn

'Put a country name in Cell E1
Set rst = con.Execute("Exec dbo.TestNewProc '" & ActiveSheet.Range("E1").Text & "'")

'The total count of records is returned to Cell A5
ActiveSheet.Range("A5").CopyFromRecordset rst

rst.Close
con.Close

End Sub


Sub CallSprocTwo()

Dim con As Connection
Dim rst As Recordset

Set con = New Connection
con.Open "Provider=SQLOLEDB;Data Source=LAPTOP\SQL_EXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI;"

Set rst = con.Execute("Exec dbo.[Ten Most Expensive Products]")
'Results of SProc are returned to Cell A1
ActiveSheet.Range("A1").CopyFromRecordset rst

rst.Close
con.Close
End Sub