运行 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
我正在使用此语法从 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