• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ADODB.Recordsetを使用してExcelのデータを取得)

ADODB.Recordsetを使用してExcelのデータを取得

このQ&Aのポイント
  • ADODB.Recordsetを使用してExcelのデータを取得する際に、一部の場合でエラーが発生する現象が発生しています。エラーの原因や対処法が分からず困っています。
  • ADODB.Recordsetを使用してExcelのデータを取得する際に、「エラーを特定できません」というエラーが発生する問題があります。このエラーは再現性があるわけではなく、一度発生すると一定時間後には再度発生しなくなるという特徴があります。
  • ADODB.Recordsetを使用してExcelのデータを取得する際に、「エラーを特定できません」というエラーがランダムに発生します。エラーの発生原因を特定し、安定してデータを取得する方法を知りたいです。

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

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.3

>IISの設定は変更できない状況ですので、何とかIISの設定を変更せずに解決したいのですが。。。 設定ができないまでも、権限設定の内容を確認するだけでもできないでしょうか? 後、この件で気になったのは同時アクセスです。 別のユーザが該当ASPに対し、このExcelのロード処理をつかんでしまっている可能性は考えられないですか? 1人でローカルPCでアクセスしている時は、自分だけしかアクセスしないのでこのエラーは発生しませんが、恐らく、実稼働サーバーにリリースして動かした際、複数のユーザが同時にアクセスしますので、Excelファイルが排他ロックかかっている可能性が高いかなと思います。 やはり、私が言っていた権限の話とExcelの排他アクセスに関することが、MSのサイトにも掲載されてました。 http://support.microsoft.com/kb/195951/ja MSのサイトで掲載されているエラーの現象とまったく同じものが掲載されていますので参考になるのではないかと思います。 なので、サーバーの権限設定と排他制御、この2つがクリアできないと、問題は解決しないと言えると思います。 稼働サーバーの管理者に依頼し、まずはExcelの権限、ファイルの排他状況を確認してみてください。 「Excelファイルが存在するのは間違いない」ということが確認できたのですから、権限設定の確認もできるはずです。 稼働サーバーの設定は避けたいとお思いな気持ちや事情はわかりますが、こういったものは、一度設定してしまえば、二度と変更する必要がないものですので、ビジネス上の政治的な話もあるかもしれませんが、そこはサーバー管理者等と調整して、設定を行えるよう調整すべきです。 エラーの原因が環境にあるのに、環境を変更できません というより、そのアプリやWebサイトを使っている利用者側の立場だったら、動かないアプリ・Webサイトを見せられている方が損害が大きいはずです。 プログラムと環境設定は常にセットで動くものであるということを 肝に銘じて頂きたいです。宜しくお願いします。

seventhang
質問者

補足

お世話になります。 ご回答ありがとうございます。 やはりIISの設定をしないと解決しなさそうですね。 > エラーの原因が環境にあるのに、環境を変更できません というより、 > そのアプリやWebサイトを使っている利用者側の立場だったら、 > 動かないアプリ・Webサイトを見せられている方が損害が大きいはずです。 まさにその通りです。 とりあえず、管理者と相談してみます。 ありがとうございました。

その他の回答 (2)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

補足ありがとうございます。 明らかにExcelファイルが開けないエラーのようですね。 気になったのですが、 Request.ServerVariables("APPL_PHYSICAL_PATH") & StrFileName に 該当する場所に、Webサーバー上、該当のExcelファイルは 存在していますよね? 試しに、データが入っているExcelファイルを 上記ASPを動かしているフォルダに移動し、接続文字列の定義を StrConn = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" &_ Server.MapPath(StrFileName) & ";" にするとどうなりますか? また、このExcelファイルのアクセス権限も気になります。 [IUSER_マシン名] というユーザに対して、権限を与えてみてください。 それでも駄目なら別の原因が考えられますので、また質問して頂いても宜しいでしょうか? 宜しくお願いします。

参考URL:
http://www.ken3.org/asp/backno/asp053.html
seventhang
質問者

補足

お世話になります。 Request.ServerVariables("APPL_PHYSICAL_PATH") & StrFileName には確実にファイルは存在しています。 StrConn = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" &_ Server.MapPath(StrFileName) & ";" として、ファイルを移動しても、挙動は変わらない状況です。 IISの設定は変更できない状況ですので、何とかIISの設定を変更せずに解決したいのですが。。。 宜しくお願い致します。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

少し試して頂きたいのですが、 On Error Resume Next を処理の前に宣言し、Err.Number と Err.Description をみて、 どのようなエラーを返しているか具体的に見てみたいです。 下記のような感じで、実行した結果、どうなるか教えてください。 On Error Resume Next Dim ObjRS Set ObjRS = Server.CreateObject("ADODB.Recordset") Dim StrConn StrConn = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" &_ Request.ServerVariables("APPL_PHYSICAL_PATH") & StrFileName & ";" Dim StrSQL StrSQL = "SELECT * FROM " & EXCEL_DATA_RANGE_NAME ObjRS.Open StrSQL, StrConn, 0 If Err.Number <> 0 Then Response.Write("エラー詳細<br>") Response.Write(Err.Description) Response.End End If 宜しくお願いします。

seventhang
質問者

補足

お世話になります。 ご回答ありがとうございます。 ご指示を頂いたように実行してみましたが、 ObjRS.Open StrSQL, StrConn, 0 の部分で処理が完全に中断してしまうようで、 If Err.Number <> 0 Then 以下が実行されません。 その時に表示されるエラーメッセージは、 「Error-2147467259:エラーを特定できませんProvider」 On Error Resume Next を省略したときのエラーメッセージは、 「Provider エラー '80004005' エラーを特定できません 」 となります。 エラーを起こしてから、次に正常に実行されるまでの間隔は約43秒で、 正常に実行されてから大体70秒以内に再度実行するとエラーになる、 という感じです。 宜しくお願いします。

関連するQ&A