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

よろしくお願いします。
以下のコードで、最終行で「エラーを特定できません」というエラーが表示されるのですが、
エラーが表示される時とされない場合があります。

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

最初に実行したときは、エラーも表示されず、期待した結果を得ることができるのですが、再度実行したら「エラーを特定できません」となり、
1分ほど時間をおくとまたエラーを起こさずに動作するという感じです。
まったく原因が分からず、困っております。
宜しくお願いいたします。

A 回答 (3件)

>IISの設定は変更できない状況ですので、何とかIISの設定を変更せずに解決したいのですが。

。。

設定ができないまでも、権限設定の内容を確認するだけでもできないでしょうか?

後、この件で気になったのは同時アクセスです。
別のユーザが該当ASPに対し、このExcelのロード処理をつかんでしまっている可能性は考えられないですか?
1人でローカルPCでアクセスしている時は、自分だけしかアクセスしないのでこのエラーは発生しませんが、恐らく、実稼働サーバーにリリースして動かした際、複数のユーザが同時にアクセスしますので、Excelファイルが排他ロックかかっている可能性が高いかなと思います。

やはり、私が言っていた権限の話とExcelの排他アクセスに関することが、MSのサイトにも掲載されてました。
http://support.microsoft.com/kb/195951/ja

MSのサイトで掲載されているエラーの現象とまったく同じものが掲載されていますので参考になるのではないかと思います。
なので、サーバーの権限設定と排他制御、この2つがクリアできないと、問題は解決しないと言えると思います。

稼働サーバーの管理者に依頼し、まずはExcelの権限、ファイルの排他状況を確認してみてください。
「Excelファイルが存在するのは間違いない」ということが確認できたのですから、権限設定の確認もできるはずです。

稼働サーバーの設定は避けたいとお思いな気持ちや事情はわかりますが、こういったものは、一度設定してしまえば、二度と変更する必要がないものですので、ビジネス上の政治的な話もあるかもしれませんが、そこはサーバー管理者等と調整して、設定を行えるよう調整すべきです。

エラーの原因が環境にあるのに、環境を変更できません というより、そのアプリやWebサイトを使っている利用者側の立場だったら、動かないアプリ・Webサイトを見せられている方が損害が大きいはずです。

プログラムと環境設定は常にセットで動くものであるということを
肝に銘じて頂きたいです。宜しくお願いします。

この回答への補足

お世話になります。
ご回答ありがとうございます。

やはりIISの設定をしないと解決しなさそうですね。

> エラーの原因が環境にあるのに、環境を変更できません というより、
> そのアプリやWebサイトを使っている利用者側の立場だったら、
> 動かないアプリ・Webサイトを見せられている方が損害が大きいはずです。

まさにその通りです。
とりあえず、管理者と相談してみます。
ありがとうございました。

補足日時:2008/06/24 18:58
    • good
    • 0

補足ありがとうございます。



明らかに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

この回答への補足

お世話になります。
Request.ServerVariables("APPL_PHYSICAL_PATH") & StrFileName
には確実にファイルは存在しています。

StrConn = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" &_
Server.MapPath(StrFileName) & ";"
として、ファイルを移動しても、挙動は変わらない状況です。

IISの設定は変更できない状況ですので、何とかIISの設定を変更せずに解決したいのですが。。。

宜しくお願い致します。

補足日時:2008/06/23 10:52
    • good
    • 0

少し試して頂きたいのですが、



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

宜しくお願いします。

この回答への補足

お世話になります。
ご回答ありがとうございます。
ご指示を頂いたように実行してみましたが、

ObjRS.Open StrSQL, StrConn, 0

の部分で処理が完全に中断してしまうようで、

If Err.Number <> 0 Then

以下が実行されません。
その時に表示されるエラーメッセージは、

「Error-2147467259:エラーを特定できませんProvider」

On Error Resume Next
を省略したときのエラーメッセージは、

「Provider エラー '80004005'
エラーを特定できません 」

となります。
エラーを起こしてから、次に正常に実行されるまでの間隔は約43秒で、
正常に実行されてから大体70秒以内に再度実行するとエラーになる、
という感じです。
宜しくお願いします。

補足日時:2008/06/19 16:14
    • good
    • 0

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