1

当社のイントラネットは、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サーバーを直接使用するように変更すると、多くのことが必要になります!

4

1 に答える 1

1

最初に行う必要があるのは、Access アプリケーション自体の外部から、Jet/ACE データベース内の SQL Server リンク テーブルを "参照" できるかどうかを判断することです。テスト データベースDatabase1.accdbにリンク テーブルが含まれている

LinkedTable.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)

だから私たちはそれうまくいくことを知っています。

あなたの質問は 2 つの懸念を引き起こします。どちらも、ASP スクリプトは通常、独自のIUSR_MachineNameアカウントで実行されるという事実に関連しています。

  1. あなたは「ユーザー DSN」を使用したと言いましたが、そのユーザー DSN を作成した場合、の誰もそれを見ることができません。おそらく、代わりにシステム DSN を使用したいと思うでしょう。

  2. SQL サーバーで Windows 認証を使用している場合は、IUSR_MachineNameアカウントに SQL サーバー データベースへのアクセスを許可する必要がある場合があります。(別の方法として、SQL 認証を使用し、SQL 資格情報をリンク テーブル定義に保存することもできますが、保存されたパスワードはあまり良い考えではありません。)

于 2013-04-21T10:54:15.430 に答える