プロが教えるわが家の防犯対策術!

みなさんこんばんわ。

IIS7.0 と ASP を使ってMDBファイルを参照したいのですが、
エラーが出て、ページを開くことが出来ません。
エラー表示は HTTP500内部サーバーエラー と表示されます。

エラーでとまる部分は以下コードの Point002 と Point003 の間です。

Response.Write "<p>Point001"

Set Objconn = Server.CreateObject("ADODB.Connection")

Response.Write "<p>Point002"

Objconn.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath(DB_Pass)

Response.Write "<p>Point003"

StrSQL="select * from " & Table_Name

Set Objrs = Server.CreateObject("ADODB.Recordset")

Response.Write "<p>Point004"

Objrs.Open StrSQL, ObjConn

Response.Write "<p>Point005"

ODBC を使う方法もあるようですが今回は ODBC を使わないでMDBファイルを参照したいのです。
よろしくお願いします。

環境
OS→Windows Vista Ultimate
Access→Access2000
IIS→IIS7.0
使用言語→VBScript

A 回答 (3件)

mesomokyuさん、こんにちは。


nas02です。

どうも、Vistaでは設定が変わっているみたいですね。
最初の接続文字列からすると、下記サイトからダウンロードできる「2007 Office system ドライバ: データ接続コンポーネント」は
インストールしてあるのでしょうか?
http://www.microsoft.com/downloads/details.aspx? …
それでしたら、接続文字列のProviderを"Microsoft.ACE.OLEDB.12.0"に設定すれば、良いと思いますがいかがでしょうか?
※"Microsoft.ACE.OLEDB.12.0"がレジストリに登録されてあるか、レジストリエディタ(regedit)で検索してチェックすると確実です。

もし、未インストールで上記のコンポーネントはインストールしないという事でしたら、レジストリから接続文字列を調べる必要があります。
1.「c:\windows\system32\」のフォルダ以下を「msjet」で検索して以下のモジュールがあることを確認します。
 ・msjet40.dll
 ・msjetoledb40.dll → これがなかったら、素直に上記のモジュールをインストールしましょう。
2.レジストリエディタ(regedit)を起動して、マイ コンピュータから「msjetoledb40.dll」を検索します。
 因みにXPでは、以下の場所がヒットします。(複数ヒットしますが、「OLE DB Provider」が同列にある方を調べます)
  "HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\InprocServer32"
3.次に、一つ上の場所をクリックします。
 XPでいえば、
  "HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}"
 です。
 そこの(既定)にデータが入っていますので、その文字列をコピーします。
 XPの場合は、「(既定):Microsoft.Jet.OLEDB.4.0」となっています。
4.コピーした文字列で、最初から検索します。(3.でヒットする「HKEY_CLASSES_ROOT\CLSID」や下位にCLSIDがないのは無視します)
 XPの場合は、以下の場所がヒットします。
  "HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.4.0"
 上記のヒットしたデータのキーから「HKEY_CLASSES_ROOT\」を抜いた値を接続文字列に使います。(多分、3.の値と同じ可能性あり)
 ※Vistaがどんな設定になっているのか非常に興味ありますので、もし分りましたら教えて下さい。

Vistaを持ってないのでこれ以上は調べられませんが、多分これでいけると思います。
    • good
    • 0
この回答へのお礼

nas02さんこんばんわ

回答ありがとうございました。
レジストリエディタで接続文字列を調べました。

以下は場所と結果です。
1、C:\Windows\system32\以下を「msjet」で検索。
結果
msjet40.dll
msjetoledb40.dll がヒットしました。

2、レジストリエディタで「msjetoledb40.dll」を検索。
結果
HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\InprocServer32 でヒット。(Vistaでは一つだけでした。環境によって違うかもしれませんが・・・)
(既定)のデータは「C:\Windows\system32\msjetoledb40.dll」となっていました。

3、ひとつ上の場所。(HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95})
結果
(既定)のデータは「Microsoft.Jet.OLEDB.4.0」となっていました。

4、レジストリエディタで「Microsoft.Jet.OLEDB.4.0」を検索。
結果
HKEY_CLASSES_ROOT\.Job でヒット。
(既定)のデータは「JobObject」となっていました。

調べた結果 4 以外は XP とほとんど同じだったのでスムーズに進めることができました。

お礼日時:2007/09/28 21:54

mesomokyuさん、こんにちは。


nas02です。

先程の回答のレジストリから接続文字列のプロパイダを調べる方法ですが、オブジェクト生成の名称を調べる方法とごっちゃになってる様な気がしました。
調べるのは3.までで良いと思います。
3.もトップの値を使うのか、ProgIDの値を使うのか迷う所でありますが。。。

ご検討お祈りします。
    • good
    • 0
この回答へのお礼

nas02さんこんばんわ

すみません。最終的にどうなったか書くのを忘れていました。

無事にDBの開く事ができました。nas02さんには本当に感謝しています。ありがとうございました!!
理由はよくわからないのですが、「2007 Office system ドライバ: データ接続コンポーネント」をインストールした後で接続文字列を「Microsoft.Jet.OLEDB.4.0」で試してみたらうまくいきました。
因みに「Microsoft.ACE.OLEDB.12.0」でも大丈夫みたいです。

最後まで的確なアドバイスありがとうございました。

お礼日時:2007/09/28 22:26

接続文字列の指定が間違っているのではないでしょうか?



以下のサイトが参考になると思います。
http://msdn.microsoft.com/library/ja/default.asp …
http://msdn.microsoft.com/library/ja/default.asp …

Objconn.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath(DB_Pass)
 ↓
Objconn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath(DB_Pass)
 又は
Objconn.Provider = "Microsoft.Jet.OLEDB.4.0"
Objconn.open Server.Mappath(DB_Pass)
※動作環境がないので試してません。

この回答への補足

nas02さん回答ありがとうございました。

教えられたとおりやってみましたが、どの場合もObjconn.openの部分でエラーになってしまいます。
そのほかやってみた事
1、パスを指定する部分を絶対パスで指定。
2、データベースを開く部分のプログラムをサブルーチンではなく直接書いてみた。
(質問の欄には書いていませんでしたがデータベースの開け閉めなどはサブルーチンにしています。)

結果は1、2どちらもObjconn.openの部分でエラーになりました。
同じプログラムをIIS5.0で動かすとエラーも出ないで表示されるのですが・・・。
今回はどうしてもIIS7.0を使ってWebサイトを作る必要があるので、よろしくお願いします。

補足日時:2007/09/26 23:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!