IIS7.0とASPを使ってMDBファイルを参照する方法

このQ&Aのポイント
  • IIS7.0とASPを使用してMDBファイルを参照する方法についてのエラー解決方法を教えてください。
  • IIS7.0とASPを使ってMDBファイルを参照する際に発生するエラーで、HTTP500内部サーバーエラーが表示されます。
  • MDBファイルを参照するためのVBScriptコードにおいて、Point002とPoint003の間にエラーがあります。
回答を見る
  • ベストアンサー

IIS7.0 と ASP を使ってMDBファイルを参照したい

みなさんこんばんわ。 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

質問者が選んだベストアンサー

  • ベストアンサー
  • nas02
  • ベストアンサー率70% (22/31)
回答No.2

mesomokyuさん、こんにちは。 nas02です。 どうも、Vistaでは設定が変わっているみたいですね。 最初の接続文字列からすると、下記サイトからダウンロードできる「2007 Office system ドライバ: データ接続コンポーネント」は インストールしてあるのでしょうか? http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=7554f536-8c28-4598-9b72-ef94e038c891 それでしたら、接続文字列の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を持ってないのでこれ以上は調べられませんが、多分これでいけると思います。

mesomokyu
質問者

お礼

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 とほとんど同じだったのでスムーズに進めることができました。

その他の回答 (2)

  • nas02
  • ベストアンサー率70% (22/31)
回答No.3

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

mesomokyu
質問者

お礼

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

  • nas02
  • ベストアンサー率70% (22/31)
回答No.1

接続文字列の指定が間違っているのではないでしょうか? 以下のサイトが参考になると思います。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/mdrefjetprovspec.asp http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/mdmthopenclosevbscriptx.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) ※動作環境がないので試してません。

mesomokyu
質問者

補足

nas02さん回答ありがとうございました。 教えられたとおりやってみましたが、どの場合もObjconn.openの部分でエラーになってしまいます。 そのほかやってみた事 1、パスを指定する部分を絶対パスで指定。 2、データベースを開く部分のプログラムをサブルーチンではなく直接書いてみた。 (質問の欄には書いていませんでしたがデータベースの開け閉めなどはサブルーチンにしています。) 結果は1、2どちらもObjconn.openの部分でエラーになりました。 同じプログラムをIIS5.0で動かすとエラーも出ないで表示されるのですが・・・。 今回はどうしてもIIS7.0を使ってWebサイトを作る必要があるので、よろしくお願いします。

関連するQ&A

  • ASPで,mdbファイルへのinsert文のエラー

    ASPで,guestbook.mdbファイルへ接続,はOK, そしてinsert文で新規レコードを追加しようとすると エラーが出てしまいます。 select文は使えるのですが。 エラーの内容は, エラー タイプ Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Microsoft Access Driver] 更新可能なクエリであることが必要です。 /asp_server/toda/guestbook.asp, line 24 です。 dbへの接続方法は, '***** データベース(guestbook.mdb)に接続 ***** Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & _ Server.Mappath("guestbook.mdb") です。 問題は, '***** 名前とメッセージが空白でないときはデータ追加SQLを実行 ***** StrSQL = "insert into T_Message (name, word, entrydate) " & _ "values ('" & name & "','" & word & "',#" & entrydate & "#)" ObjConn.Execute(StrSQL) ここの,ObjConn.Execute(StrSQL)でエラーが起こります。 なぜエラーが出るのでしょうか。原因と対処方法をおしえていただけませんでしょうか? 「更新可能なクエリであることが必要です。」というエラーなので何かの設定の問題でしょうか?

  • ASPソースコードをPHPソースコードに書き換え

    下記のASPソースコードをPHPソースコードに書き換えようとしています。 <% Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.Open "database_1" Set ObjRS = Server.CreateObject("ADODB.Recordset") ObjRS.Open "food", ObjConn, 3, 3 ObjRS.Filter = "jewelry_0_ID=" & Request.QueryString("No") If ObjRS.EOF Then Response.Write("選択された名称の区分はありません。<br><hr>") Response.Write("<a href=""index.html"">区分選択に戻る</a>") Response.End End If Do While Not ObjRS.EOF Response.Write("<tr><td>") Response.Write(ObjRS.Fields("名称").Value) Response.Write("</td><td>") ObjRS.MoveNext Loop ObjRS.Close ObjConn.Close %> PHPに不慣れであるため、このうち、 Set ObjRS = Server.CreateObject("ADODB.Recordset") ObjRS.Open "jewelry", ObjConn, 3, 3 ObjRS.Filter = "jewelry_0_ID=" & Request.QueryString("No") と、 ObjRS.Close をどのようにすればよいか、分かりません。PHPには、レコードセットを開くという概念はないのでしょうか?下記URIには、見当たりません。 http://php.plus-server.net/ref.uodbc.html

    • ベストアンサー
    • PHP
  • ASP + MDBで発生したエラーが解決できません。。。

    こんにちは。 いま、ローカルPCでシステム開発をしています。 環境としては、  WindowsXP + IIS + ASP + MDB(ACCESS2003) です。 いま、MDBにDB接続して、データを取得しようとしているのですが、以下のエラーが発生していて、治りません。 【エラータイプ】 Microsoft VBScript 実行時エラー (0x800A01B6) オブジェクトでサポートされていないプロパティまたはメソッドです。:Open ソースコードは以下の通りです。 【ソース】 'コネクションオブジェクト Set objCon = Server.CreateObject("ADODB.Connection") objCon.Provider = "Microsoft.Jet.OLEDB.4.0" objCon.ConnectionString = "C:\test.mdb" objCon.Open 'レコードセットオブジェクト objRs = Server.CreateObject("ADODB.Recordset") objRs.Open strSQL, objCon, 3 上記のobjRs.Open→Set objRs = objCon.Executeに変更するとエラーは発生しないのですが、RecordCountなどのプロパティが利用できません。 色々と調査したのですが、全くわかりません。 どなたか情報をご存知でしたら、ぜひともご教示ください。 宜しくお願いします。

  • IIS7でIIS6で動いていたASPアプリを動かしたい

    初めまして、santa51と申します 表題の通り、IIS7でASPアプリを動かしたいのですが、 動きません。 xpのIIS6では動いていました エラーの内容は Microsoft OLE DB Provider for ODBC Drivers エラー '80004005' [Microsoft][ODBC Microsoft Access Driver] ディスクまたはネットワークのエラーです。 /????/?????/login.asp, 行 109 となります 109行は 107 DBName="Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("../cgi-bin/mydb/" & campany & "/master.mdb") 108 Set db=Server.CreateObject("ADODB.Connection") 109 db.Open DBName です。 確認がとれていることは 1.Server.Mappath("../cgi-bin/mydb/" & campany & "/master.mdb")は確実にあっています。 環境は vista business IIS7 access2003 です。 以上、よろしくお願いします santa51

  • ASPでAccessのデータを更新、削除

    ASPでAccessのデータベースに対するデータの更新、レコードの 削除が出来ません。(データの検索、参照は出来ています。) DBはAccess2000です。 下記のようなエラーメッセージが出てしまいます。 【エラーメッセージ】 ADODB.Recordset エラー '800a0cb3' オブジェクトまたはプロバイダは要求された操作を実行できません。 /asp/ParsonUP.asp, 行 95 【プログラム】 <% dMode = Request.QueryString("MODE") sSyain = Request.QueryString("SyainNO") sSimei = Request.QueryString("Simei") sKaisya = Request.QueryString("KAISYA") '************* DB コネクション ************************** Dim fPROV,fDBNAME fPROV = "Microsoft.Jet.OLEDB.4.0" fDBNAME = "D:\Inetpub\wwwroot\asp\data\OP_tbl2.mdb" Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.ConnectionString = "Provider=" & fPROV & ";Data Source=" & fDBNAME ObjConn.Open Set ObjRS = Server.CreateObject("ADODB.Recordset") StrSQL = "SELECT * FROM TM_個人情報 WHERE TM_個人情報.社員NO = '" & sSyain & "';" '************************************************** If sSyain<>"" Then Select Case dMode Case "UpDT" '更新登録 ObjRS.Open StrSQL, ObjConn, adOpenStatic With ObjRS .Fields("氏名").Value=sSimei .Fields("所属会社").Value=sKaisya .Update .close End With Case "DelDT" '削除 ObjRS.Open StrSQL, ObjConn ObjRS.Delete End Select Else Response.Write "<H2>処理に失敗しました</H2>" End If %>

  • LAN上のMDBをIIS(ASP)から開く

    DMZであるWEBサーバー(IIS4.0)からLAN上のMDBファイルを操作したいのですが・・・。うまくいきません。 ネットワークドライブでWEBサーバー側に登録して ADODB.Connectionで直接、またはODBC介してでやろうとしましたが駄目でした。 IIS側でODBCの登録自体はうまくいっているのか(?)MDBの最適化はODBCの画面から行えます。 IIS越しでASPからデータベースを開こうとすると [Microsoft][ODBC Microsoft Access Driver] ファイル '(不明)' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。 権限の問題なのでしょうか? LAN側のファイルもフォルダもeveryoneフルコントロールに してあります。(怖いけど(笑)) 同様のケースで過去に解決された方、または良い案がある方。ご教授下さい。

  • Response.Writeを使用して更新するには

    いつもお世話になってます。 前のページでIDで検索し、更新ボタンをクリックするとkousin.aspへ表示しているIDのレコードをそのまま表示して更新をしたいのですがうまくいきません。 Response.Writeのせいでしょうか?宜しくお願いします。 <%@LANGUAGE="VBSCRIPT"%> <% Dim ObjConn,ObjRS pickup = Request.Form("uID") MSACFN = Server.MapPath("dbname.mdb") DBFile="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MSACFN Set ObjConn = Server.CreateObject("ADODB.Connection") Set ObjRS = Server.CreateObject("ADODB.Recordset") ObjConn.Open DBFile sql="select * from tablename where uID = '"&pickup&"'" Set DBexe = ObjConn.Execute(sql) ObjRS.CursorLocation = 3 ObjRS.Open "select * from tablename" ,ObjConn,3,3 Response.Write "<form method=""POST"" action=""kousin.asp"">" Response.Write "<table width=""519"" border=""1"">" Response.Write "<tr>" Response.Write "<tr><td>" & ("ID") & "</td><td>" & ObjRS("uID") & "</td></tr>" Response.Write "<tr><td>" & ("氏名") & "</td><td>"& ObjRS("uNAME") & "</td></tr>" Response.Write "<tr><td>" & "<input type=""hidden"" value=""uID""><input type=""submit"" value=""更新"" onClick='return checkForm()'><input type=""button"" onclick=""del.asp""name=""削除"" value=""削除""></td>" Loop Response.Write "</table>" ObjRS.close Set ObjRS=Nothing ObjConn.close Set ObjConn=Nothing %>

  • うまく表示されません。

    MS SQL SERVERを使い始めた初心者です。 環境は XP、IIS6.0、SQL2000SERVER です。 エラーメッセージ> Microsoft OLE DB Provider for ODBC Drivers (0x80040E37) [Microsoft][ODBC SQL Server Driver][SQL Server]オブジェクト名 'tblMember'が間違っています。 /test/Connection_3.asp, line 12 ソース> 1:<html> 2:<head> 3:<title>Connect</title> 4:</head> 5:<body> 6: 7:<% 8:Set ConnDB = Server.CreateObject("ADODB.Connection") 9:ConnDB.Open = "DSN=dbMember;UID=sa;PWD=sa;" 10: 11:strSQL = "INSERT INTO tblMember(id,pwd,name,phone) VALUES('melon','4444','일지매','019-999-9999')" 12:Set objRs = ConnDB.Execute(strSQL) strSQL = "SELECT * FROM tblMember" Set objRs = ConnDB.Execute(strSQL) Do While objRs.EOF = False Response.Write objRs("name") & " " Response.Write objRs("phone") & "<BR>" objRs.MoveNext Loop objRs.Close ConnDB.Close Set objRs = Nothing Set ConnDB = Nothing %> </body> </html> これでソースでやるとうまく表示されません。 どうしてなのでしょか?ご教授のほどよろしくお願いいたします。

  • Unix(AIX)サーバー上でMySQLのデータベースに接続する際のASPコード

    私はAccessでのデータベースは得意なのですが、MySQLについては初心者です。 ネットで見付けたASPを使ったMySQLの接続の仕方のコード(下記参照)を見付けたのですが、Unix(AIX)サーバー上で、下記のようなコードで本当に接続できるのでしょうか? もしお分かりでしたら、Unix(AIX)サーバー上でMySQL 4.0.24 に接続するコード、サンプル例など教えて頂ければ助かります。 それと、テスト環境がWindows サーバーなので、一旦Windows サーバー上で完成させたページ、データベースを、どのようにしてUnix(AIX)サーバー上に移せば問題なくそれらが働くのか、やり方・注意点など教えて頂ければ本当に助かります。 お忙しい中すみませんが、どうぞ宜しく御願いします。 余談: PHPで作成し直しと思ったのですが、ASPとAccessで既にページを完成させてしまったので、コードはASPのままデータベースだけをAccessからMySQLに移り変えようと思っています。 <% Dim sConnection, objConn , objRS sConnection = \"DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=Your_Mysql_DB; UID=mysql_username;PASSWORD=mysql_password; OPTION=3\" Set objConn = Server.CreateObject(\"ADODB.Connection\") objConn.Open(sConnection) Set objRS = objConn.Execute(\"SELECT FirstName, LastName FROM tblUsers\") While Not objRS.EOF Response.Write objRS.Fields(\"LastName\") & \", \" & objRS.Fields(\"FirstName\") & \"<br>\" Response.Write & \" \" objRS.MoveNext Wend objRS.Close Set objRS = Nothing objConn.Close Set objConn = Nothing %>

  • mdbを直接開いてもasp側に影響を与えない方法について

    お世話になります。当方、Windows Server 2003 R2 SP1 で IIS6.0 を使用しています。 サーバ側に設置しているmdbファイルをODBCでシステムDSNに登録し、ASPから 接続しております。 メンテナンスなどで直接mdbファイルを開いている時に、ASPのページに アクセスすると以下のエラーメッセージが出て正常表示が出来なくなります。 ======================================================== HTTP 500.100 - 内部サーバー エラー - ASP エラー インターネット インフォメーション サービス -------------------------------------------------------- エラー タイプ Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Microsoft Access Driver] '(不明)' は既に使用されているので、使用できませんでした。 ======================================================== mdbファイルを直接開いても、ASP側でもエラー表示されないように するにはどうしたらよいでしょうか? ソースは以下のようにしております。 Set cnn=Server.CreateObject("ADODB.Connection") cnn.open "dummy" cnn.close cnn.open "testdb"  '// ODBCをtestdbにしています。 SQL = "SELECT * FROM M_USER ORDER BY USERID" Set rs1 = cnn.Execute(SQL) よろしくお願いいたします。

専門家に質問してみよう