【问题标题】:Create linked tables in Access to SQL server via application role通过应用程序角色在 Access to SQL Server 中创建链接表
【发布时间】:2019-04-05 00:35:46
【问题描述】:

我正在尝试通过 VBA 脚本在 MS Access 中创建与 SQL Server 表的链接表。目前,我有以下,效果很好:

strConnect = "ODBC;DSN=xxx;Trusted_Connection=Yes;" & _
                        "APP=Microsoft Office;DATABASE=myDB;ApplicationIntent=READONLY;"
    aSourceTable = Array("dmy.Tab1", "dmy.Tab2", "dmy.Tab3", "dmy.Tab4")

    For X = 0 To UBound(aSourceTable)
        Set t = New TableDef
        t.Connect = strConnect
        t.NAME = Replace(aSourceTable(X), "dmy.", "") ' remove schema
        t.SourceTableName = aSourceTable(X)
        CurrentDb.TableDefs.Append t
    Next X

其中 xxx 是数据服务器名称,myDB 是我要连接的数据库。

现在我正在尝试重新创建相同的链接表,但与 SQL 服务器的 ODBC 连接必须通过 应用程序角色(已在 SQL 中创建)。关于如何解决这个问题的任何想法?我尝试在连接字符串中填充 UID/Password 参数,但这似乎不起作用。

我已经创建了应用角色:

名称 - tempapprole

Pwd - 临时密码

非常感谢,

尼克

【问题讨论】:

  • 要使用应用程序角色,您需要在连接后运行sp_setapprole。你知道如何在你的代码中运行存储过程吗? docs.microsoft.com/en-us/sql/relational-databases/…
  • @Nick.McDermaid 感谢您的回复;是的,我愿意。如果我通过 VBA 创建链接,我唯一不确定的地方是该放在哪里。如果我在“t.Connect”语句之后运行执行语句,那是您的想法吗?我似乎无法让它工作......
  • 这表示这可能是不可能的:sqlteam.com/forums/topic.asp?TOPIC_ID=15249 这描述了如何在 ADP 中执行此操作。但是您需要重新申请 ADP(它们非常好,但在 MS Access 中已弃用)support.microsoft.com/en-au/help/308312/…。您需要与您的管理员协商。 sp_setapprole 确实不是那么安全,因为它在您的代码中以明文形式显示。
  • @Nick.McDermaid 谢谢,这很有帮助。即使代码/数据库被安全锁定?
  • 锁定是什么意思? MS Access 或 MS Access VBS 中的任何内容都没有真正被锁定。您可以下载 VBA 密码破解程序。

标签: sql-server ms-access vba


【解决方案1】:

这对我来说可以连接到 MS SQL-Server:

Dim Conn As New ADODB.Connection
Conn.ConnectionString = "DSN=" & myDB & ";UID=" & tempapprole & ";PWD=" & temppassword
Conn.Provider = "msdasql"
Conn.Open

【讨论】:

  • 它没有解决应用程序角色方面
【解决方案2】:

你可以尝试如下-

Dim strConnect As New OleDb.OleDbConnection
strConnect.ConnectionString = "provider=microsoft.jet.oledb.4.0;data 
source=TABELS.mdb"
strConnect.Open()
aSourceTable = Array("dmy.Tab1", "dmy.Tab2", "dmy.Tab3", "dmy.Tab4")

For X = 0 To UBound(aSourceTable)
    Set t = New TableDef
    t.Connect = strConnect
    t.NAME = Replace(aSourceTable(X), "dmy.", "") ' remove schema
    t.SourceTableName = aSourceTable(X)
    CurrentDb.TableDefs.Append t
Next X

【讨论】:

  • 这以什么方式使用应用程序角色?首先,他连接的是 SQL Server,而不是 MS Access。
  • 一方面,New OleDb.OleDbConnection 是 .Net,在 VBA 中不可用。此答案无效。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2013-05-26
  • 2020-02-17
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
相关资源
最近更新 更多