我写了一个实验室已经使用了2年的“VBA”,基本上使用了访问数据库作为查询。最近,正在使用SQL数据库,并创建了一个ODBC以在查询中使用。问题是除了我的计算机外,excel无法查看查询。我有SQL Management Studio 2008,但我似乎无法让查询在其他计算机上运行。我尝试了不同的驱动程序,但无法解决这个问题。
答案 0 :(得分:2)
这不是一个无法找到的“ODBC驱动程序”;它是您创建的DSN文件(带有凭据),它是您计算机的本地文件。您需要在VBA模块中携带的连接字符串中拼出每个标记。
Sub sql_connect()
Dim svr As String, db As String, usr As String, pwd As String
Dim sCNX As String, sSQL As String
Dim cnx As Object, rs As Object
Set cnx = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
svr = "THE_SERVER"
db = "myDatabase"
usr = "me_user"
pwd = "me_users_pwd"
sCNX = "Provider=SQLNCLI11;Server=" & svr & ";Database=" & db & ";UID=" & usr & ";PWD=" & pwd & ";"
'Debug.Print sCNX 'used for syntax checking
cnx.Open sCNX
sSQL = "SELECT TOP 50 * FROM [myDatabase].dbo.[myTABLE]"
rs.Open sSQL, cnx
Do While Not rs.EOF
Debug.Print rs(0) & " - " & rs(1)
rs.movenext
Loop
rs.Close: Set rs = Nothing
cnx.Close: Set cnx = Nothing
End Sub
有一些方法可以隐藏您提供的凭据;使用密码锁定您的VBA项目将是一个开始。创建具有有限只读访问权限的MSSQL用户也是一个很好的步骤。
我不确定它是否明显,但该用户和密码是SQL用户凭据,而不是使用可信连接的域用户。