【问题标题】:Access ODBC Query访问 ODBC 查询
【发布时间】:2018-04-24 03:26:45
【问题描述】:

我正在尝试创建一个宏来运行将从 SQL Server 数据库中检索数据的查询。问题是运行宏后,它需要我插入用户名和密码才能访问数据库。

只是想知道是否有任何方法可以通过 VBA 绕过凭据(可能创建某种连接并传递连接字符串)。我知道我可以使用“查询设计”构建器创建传递查询,但是在调用查询时有没有办法在 VBA 中将凭据作为单独的参数传递。

DoCmd.OpenQuery "QueryName", acViewNormal, acEdit

感谢任何帮助。

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    是的。我通过销毁和创建传递查询来做到这一点。这是用于 Oracle 的一些代码,但它适用于 SQL Server。只需确保您有一个匹配的 DSN:

    Dim db As Database, q As QueryDef, sqlString as string
    
    Set db = CurrentDb()
    
    DoCmd.DeleteObject acQuery, "sqlServerQuery"
    Set q = db.CreateQueryDef"sqlServerQuery"
    
    
    q.Connect = "ODBC;DSN=myDSN;UID=myUser;PWD=myPassword"
    
    queryString = "SELECT something FROM mySQLServertable"
    
    q.SQL = queryString
    q.ReturnsRecords = True 
    

    【讨论】:

    • 谢谢,是否可以调用保存的查询而不是复制查询字符串?
    • 所以您想运行保存的查询但传递登录凭据?是的,让我展示的代码使用您的凭据构建传递查询,然后让您保存的查询针对它运行。
    • 为什么要在 VBA 中传递凭据?
    • 谢谢!我正在尝试自动化报告以使其每天早上发送,但会提示输入登录凭据。
    • 我明白了。将链接表设置到保存了您的凭据的 SQL Server 或像@KKloke 建议的受信任连接可能更方便。
    【解决方案2】:

    如果使用 ADO 连接,则可以使用 ODBC 连接字符串连接到 SQL Server 数据库:

        Dim conn As New ADODB.Connection
        conn.Open "Driver={SQL Server};Server=[My Server];Database=[My Database];User Id=[My Username];Password=[My Password];"
    
        Dim cmd As New ADODB.Command
        cmd.ActiveConnection = conn
        cmd.CommandText = "SELECT * FROM [My Table]"
        cmd.Execute
    
        Dim rst As New ADODB.Recordset
        rst.Open cmd
    

    这会将“SELECT * from [My Table]”查询的结果加载到名为 rst 的记录集中。如果您可以通过 AD 凭据访问 SQL Server 数据库,则可以使用受信任的连接:

    conn.Open "Driver={SQL Server};Server=[My Server];Database=[My Database];Trusted_Connection=True"
    

    【讨论】:

    • 谢谢,是否可以调用保存的查询而不是复制查询字符串?
    • 如果您通过文件 dsn 连接,您可以将密码存储在那里:UID=test PWD=test123
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多