我们正在尝试将带有 VBScript 宏的 Excel 文档连接到存储在 Web 服务器中的数据库,但由于某种原因无法识别用户并反复抛出错误。
我放弃了一个连接问题,因为它返回了一个 SQL 错误,而不是像超时或服务器不存在之类的东西。
我们正在尝试使用 ip 地址连接到服务器。
我们检查了日志记录方法是混合的(win 和 sql)并且启用了到服务器的远程连接。
如果我使用连接字符串(用户名和密码)中提供的凭据,我可以毫无问题地登录到 SQL Server。
我们尝试了直接连接(外部 vpn),因为我们认为它可能是我们的防火墙,但得到了同样的错误。
我得到的错误(不是原来的,因为它是西班牙语,但与此非常相似):
尝试连接的代码(测试数据但与现实相似)。
Sub excel_sqlsrv()
Set rs = CreateObject("ADODB.Recordset")
Set conn = CreateObject("ADODB.Connection")
strConn = "Driver={ODBC Driver 17 for SQL Server};Server=10.20.30.5;Database=mydb;UID=sa;PWD=abcd12345;"
conn.Open strConn
strSqL = "SELECT * FROM USERS"
rs.Open strSqL
End Sub
使用 ODBC 数据源管理器创建一个名为 mydb 的连接并测试它是否正常工作。然后使用
Sub excel_sqlsrv()
Const strConn = "mydb" ' ODBC source
Const strsql = "SELECT * FROM USERS"
Dim conn As Object, rs As Object
Set rs = CreateObject("ADODB.Recordset")
Set conn = CreateObject("ADODB.Connection")
On Error Resume Next
conn.Open strConn
If conn.Errors.Count > 0 Then
Dim i, s
For i = 0 To conn.Errors.Count - 1
s = s & conn.Errors(i) & vbLf
Next
MsgBox s
Else
On Error GoTo 0
Set rs = conn.Execute(strsql)
Sheet1.Range("A1").CopyFromRecordset rs
End If
End Sub
您可以尝试使用 OLEDB 提供程序而不是 ADODB。
尝试使用 SQL Server 实例而不是简单的 IP 地址作为参数。
例如:
Const strConn = "DRIVER={ODBC Driver 17 for SQL Server};" & _
"SERVER=SQL-INSTANCE\INSTANCENAME; DATABASE=DATABASENAME; UID=USER; PWD=PASSWORD;"
我有一个类似的问题,如果不是同一个问题,这解决了它。
使用正确的登录凭据将 ODBC 源添加到数据源。
添加 ODBC 数据源时,不要将其添加为 DSN 用户,而是添加为 DSN 系统。