1

我们的 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 会涉及很多!

4

1 回答 1

1

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

链接表.png

以下 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 凭据保存在链接表定义中,但保存密码不是一个好主意。)

于 2013-04-21T10:54:15.430 回答