【问题标题】:SQL query not working as expected in excel 2010SQL 查询在 excel 2010 中未按预期工作
【发布时间】:2015-09-03 22:54:20
【问题描述】:

我写了一个“VBA”,实验室已经使用了 2 年,它基本上使用 access 数据库作为查询。最近,正在使用一个 SQL 数据库,并创建了一个 ODBC 以在查询中使用。问题是excel看不到查询,除了我的电脑。我有 SQL Management Studio 2008,但我似乎无法让查询在其他计算机上运行。我尝试了不同的驱动程序,但无法解决这个问题。

【问题讨论】:

  • 请添加代码示例和错误消息或更详细的意外行为描述。
  • 我不在办公室,明天将发布确切的错误,但基本上找不到 odbc 驱动程序。我已经尝试了 ms 访问可再发行驱动程序和 system32 文件夹中的 sqlmanagement.msc,但这没有帮助。谢谢你:)。
  • 所以您从 Excel 查询 Access,而现在您要从 Excel 转到 SQL Server?听起来可能是权限问题。
  • 如何添加 ODBC 以便 excel 可以访问它?谢谢你:)。
  • 您需要在每台计算机上添加一个系统 DSN(数据源名称)。或者,在 MS Access 中使用无 DSN 连接:support.microsoft.com/en-us/kb/892490。尝试链接的方法,您不必将 DSN 部署到需要使用它的每台计算机。将来考虑放弃 MS Access 和 ODBC

标签: sql excel excel-2010 vba


【解决方案1】:

这不是找不到的“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 用户凭据,而不是使用受信任连接的域用户。

【讨论】:

  • 感谢大家的帮助和向我介绍无 DSN 连接,效果很好:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2023-03-24
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多