【发布时间】:2014-03-27 19:37:02
【问题描述】:
我正在尝试使用来自 SQL Server 的数据填充 Excel 文件中的组合框。
这里是事件代码:
Private Sub Workbook_Open()
ActiveWorkbook.Sheets("Generation").Activate
Set cn = New ADODB.Connection
On Error Resume Next
With cn
.ConnectionString = "Provider=SQLOLEDB.1;" & _
"Integrated Security=SSPI;" & _
"Server=" & "192.160.160.150;" & _
"Database=" & "em_Consumer;" & _
"User Id= " & "User" & _
"Password = " & "server123"
.Open
End With
Set rs = New ADODB.Recordset
sqltextexec = " SELECT name FROM sys.tables WHERE schema_id = 7 AND name LIKE 'FinalCalculated%' ORDER BY create_date "
rs.Open sqltextexec, cn
rs.MoveFirst
With Sheets("Generation").ComboBox1
.Clear
Do
.AddItem rs![Name]
rs.MoveNext
Loop Until rs.EOF
End With
End Sub
此代码在我的计算机和我同事的计算机上也有效(我们来自 DB 团队),但不使用 DB 的分析师不会在文件中填充列表。
程序是否可以使用 Windows 身份验证来连接数据库?
【问题讨论】:
-
他们是否有权访问您网络上的数据库服务器?该连接字符串使用服务器身份验证(用户名=用户,密码=server123),而不是 Windows 身份验证。
-
是的,他们有权访问。该用户是专门为分析师创建的,并且使用这些凭据使该文件连接到数据库是一个想法。但我不知道为什么它在我的电脑上有效,而在他们的电脑上无效。
-
您是否在他们的计算机上运行了程序的逐行调试器?您是否在任何地方都遇到连接错误?还是返回的记录集由于某种未知原因而只是空白?
-
不,我没有尝试在他们的计算机上运行调试器
-
如果可能的话,我会建议作为第一步。查明是否建立了 SQL 连接,如果没有,您会得到什么错误响应?如果它们位于不同的子网(例如 192.160.161.150),则它们所在的网络交换机设备将需要转换流量以允许两个网络相互通信。否则,您需要 (1) 允许通过防火墙对 SQL 服务器进行外部访问并让用户通过公共 IP 进行连接,或者 (2) 他们必须使用 VPN。
标签: sql sql-server excel vba