【问题标题】:Error when attempting to use a Linked table in MS access尝试在 MS 访问中使用链接表时出错
【发布时间】:2013-04-16 13:28:45
【问题描述】:

我们的 Intranet 在 asp/vb 脚本/MS Access 下运行。

我们在使用 MSAccess 时遇到问题,希望将其替换为 MSSQL Server。最初我以为我可以将当​​前数据从 Access 导入 MSSQL 并通过链接表连接到它们。 - 所以无需触摸代码。

但是,当我尝试打开使用链接表的页面时,出现以下错误:

Microsoft JET 数据库引擎错误“80004005” ODBC--连接到“xxxx”失败。 /index.asp,第 80 行

xxxx 是我为链接表而定义的用户 DSN。 - 现在使用 SQL Server 身份验证。但是我在使用窗口身份验证时遇到了同样的错误。

从访问中打开链接表时,一切都很好。

IIS 7.5 / ASP 经典 (vbscript) SQL Server 2008 R2

有没有人有什么想法,我真的很想避免重新编码任何东西,而直接使用 SQL Server 会涉及很多!

【问题讨论】:

    标签: sql-server ms-access asp-classic


    【解决方案1】:

    我们需要做的第一件事是确定是否可以从 Access 应用程序本身的外部“看到”Jet/ACE 数据库中的 SQL Server 链接表。我的测试数据库Database1.accdb 包含一个链接表

    以下 VBScript 证明我可以“看到”该表,而无需在 Access 本身中:

    Option Explicit
    Dim con  '' As ADODB.Connection
    Dim rst  '' As ADODB.Recordset
    Const AccessLinkedTableName = "dbo_linkedTable"
    Set con = CreateObject("ADODB.Connection")
    con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\Public\Database1.accdb;"
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open "SELECT COUNT(*) AS n FROM [" & AccessLinkedTableName & "]", con
    WScript.Echo "[" & AccessLinkedTableName & "] contains " & rst(0).Value & " row(s)"
    rst.Close
    Set rst = Nothing
    con.Close
    Set con = Nothing
    

    当我从我的普通帐户运行该脚本时,我得到以下信息

    C:\Users\Public>cscript /nologo linkedTableTest.vbs
    [dbo_linkedTable] contains 2 row(s)
    

    所以我们知道它可以工作。

    您的问题引起了两个问题,都与 ASP 脚本通常在其自己的 IUSR_MachineName 帐户下运行这一事实有关。

    1. 您说您使用了“用户 DSN”,但如果 创建了该用户 DSN,那么其他人将无法看到它。您可能想改用系统 DSN。

    2. 如果您在 SQL Server 上使用 Windows 身份验证,则您可能必须为 IUSR_MachineName 帐户授予对 SQL Server 数据库的访问权限。 (替代方法是使用 SQL 身份验证并将 SQL 凭据保存在链接表定义中,但保存密码不是一个好主意。)

    【讨论】:

      猜你喜欢
      • 2022-11-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 2013-06-21
      相关资源
      最近更新 更多