我们的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 classic(vbscript)SQL Server 2008 R2
有没有人有任何想法,我真的想避免重新编码任何东西,直接改用SQL服务器会涉及到很多!
答案 0 :(得分: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
帐户下运行有关。
您说您使用了“用户DSN”,但如果您创建了用户DSN,那么其他任何人都无法看到它。您可能希望改为使用系统DSN。
如果您在SQL服务器上使用Windows身份验证,则可能必须为IUSR_MachineName
帐户授予对SQL Server数据库的访问权限。 (另一种方法是使用SQL身份验证并在链接表定义中保存SQL凭据,但保存的密码不是一个好主意。)