
みなさんこんばんわ。
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
No.2ベストアンサー
- 回答日時:
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を持ってないのでこれ以上は調べられませんが、多分これでいけると思います。
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 とほとんど同じだったのでスムーズに進めることができました。
No.3
- 回答日時:
mesomokyuさん、こんにちは。
nas02です。
先程の回答のレジストリから接続文字列のプロパイダを調べる方法ですが、オブジェクト生成の名称を調べる方法とごっちゃになってる様な気がしました。
調べるのは3.までで良いと思います。
3.もトップの値を使うのか、ProgIDの値を使うのか迷う所でありますが。。。
ご検討お祈りします。
nas02さんこんばんわ
すみません。最終的にどうなったか書くのを忘れていました。
無事にDBの開く事ができました。nas02さんには本当に感謝しています。ありがとうございました!!
理由はよくわからないのですが、「2007 Office system ドライバ: データ接続コンポーネント」をインストールした後で接続文字列を「Microsoft.Jet.OLEDB.4.0」で試してみたらうまくいきました。
因みに「Microsoft.ACE.OLEDB.12.0」でも大丈夫みたいです。
最後まで的確なアドバイスありがとうございました。
No.1
- 回答日時:
接続文字列の指定が間違っているのではないでしょうか?
以下のサイトが参考になると思います。
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サイトを作る必要があるので、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルに張り付けた写真のフ...
-
【VB.NET】App.configにファイ...
-
vba マージエリアの行数を非表...
-
【VB.NET】for each文からのINS...
-
SJISで、全角文字Aの文字コード...
-
vba 空のデータをSplitする時の...
-
onedrive にexcelファイルをア...
-
aspxをhtmlに変換する方法について
-
スイッチが二台あり、別々のア...
-
Windowsで複数のファイルを同じ...
-
高校1年生情報の問題について。
-
VBAでPDFを作成する際、同じ名...
-
【VB.NET】Excelの最終行までの...
-
コマンドプロンプトの窓の起動...
-
VBA 複数のテキストボックスと...
-
SPO2測定
-
キヤノン アソビカメラ iNSPiC ...
-
エクセルマクロについて
-
DataGridView の読み書き
-
phpのファイルがブラウザで開か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルに張り付けた写真のフ...
-
スイッチが二台あり、別々のア...
-
vba マージエリアの行数を非表...
-
【VB.NET】Excelの最終行までの...
-
VBAでPDFを作成する際、同じ名...
-
Windowsで複数のファイルを同じ...
-
SJISで、全角文字Aの文字コード...
-
VB.NET Excelを読み込んでDataT...
-
【VB.NET】App.configにファイ...
-
vba 空のデータをSplitする時の...
-
高校1年生情報の問題について。
-
ffftpでファイル取得が0バイト...
-
aspxをhtmlに変換する方法について
-
VB.NETでMSComm が追加できず?
-
バッチで当日日付で作成される...
-
phpのファイルがブラウザで開か...
-
onedrive にexcelファイルをア...
-
Excelでボタン(フォームコント...
-
エクセルVBAで印刷する書式をク...
-
asp.netにてgridviewの列を動的...
おすすめ情報