- PR -

VBScriptエラー プロシージャの呼び出し、または引数が不正です。に関して

投稿者投稿内容
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-01-27 15:27
一つ質問させてください。

ASP(.netではなく)で業務用アプリを作成しています。
機能の一つに、SQLのSelect文の結果をファイルに書き出して、
ダウンロードするという処理があるのですが、テキストファイルに
書き出している途中に、VBScriptのエラーで
'プロシージャの呼び出し、または引数が不正です。'というエラー表示が
されます。

ちなみに、ASP上の画面でコードによる検索ができ、それにヒットした件数分だけ
テキストに書き出すとしていますが、その検索条件によってエラーが出たり出なかったり
しています。

また、この現象については、テスト環境では発生していなくて、本番環境で起きました。


同じようなことが発生したという方、もしくは心当たりある方、アドバイスをお願いします。

<環境>
Windows2000 Pro
IE6.0
Oracle8i --> Database
Oracle8.1.6 --> Client
Moo
大ベテラン
会議室デビュー日: 2004/04/12
投稿数: 118
お住まい・勤務地: 地球・港
投稿日時: 2006-01-27 16:03
Mooです。

エラー発生に起因するコードを提示できませんか?

プロシジャのパラメータが正しくない場合にこのエラーは発生します。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/vterrinvalidprocedurecallorargument.asp

エラー表示例:
Microsoft VBScript 実行時エラー エラー '800a0005'
プロシージャの呼び出し、または引数が不正です。: 'mid'
/err5.asp, 行 8

エラーの発生するコード例
<%'エラー発生のサンプル ERR=5
dim x,y

x=0
y=0

%>
<%= mid(x,y) %><% 'ここでエラーが出る %>


_________________
ASP++ by Moo http://moo-asp.net/
ASP/ASP.NETだいすき。

[ メッセージ編集済み 編集者: Moo 編集日時 2006-01-27 16:09 ]

[ メッセージ編集済み 編集者: Moo 編集日時 2006-01-27 16:11 ]

[ メッセージ編集済み 編集者: Moo 編集日時 2006-01-27 16:13 ]
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-01-27 16:15
Mooさん、
返答に感謝します。

IE上でのエラー表示は、
Microsoft VBScript実行時エラー (0x800A0005)
プロシージャの呼び出し、または引数が不正です。
/lipperapp/Result_obj.asp line154

です。

ちなみに、この154行目は、
テキストファイルにデータを書き込んでいる箇所です。
->objListData.Write strData & " " (最後の空白はタブ区切りの記号としています。)



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-27 16:51
引用:

鼻セレブさんの書き込み (2006-01-27 16:15) より:

ちなみに、この154行目は、
テキストファイルにデータを書き込んでいる箇所です。
->objListData.Write strData & " " (最後の空白はタブ区切りの記号としています。)


vbTab を使うべきなのでは?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Moo
大ベテラン
会議室デビュー日: 2004/04/12
投稿数: 118
お住まい・勤務地: 地球・港
投稿日時: 2006-01-27 17:20
||| objListData.Write strData & " "

うーん、さすがに1行からでは情報が少なくて判断できません。
この行より前に実行されるコードには問題は無いのですか?

たとえば...
・これはFSOですか?
・objListDataが正しいか確認してください
・strData のデータが正しいか確認してください

一応検証コードを貼っておきます
<%
call CreateFile

'TODO:後始末が不十分
Sub CreateFile()

Dim Moo
Moo="FSO!FSO!FSO!"

Dim fso, objListData
Set fso = CreateObject("Scripting.FileSystemObject")
'TODO:書き込み権の確認
Set objListData = fso.CreateTextFile("c:\tmp\testfile.txt", True)
'1 行書き込みます。
objListData.Write Moo & " "
objListData.Close
End Sub
%>


_________________
ASP++ by Moo http://moo-asp.net/
ASP/ASP.NETだいすき。

[ メッセージ編集済み 編集者: Moo 編集日時 2006-01-27 17:30 ]
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-01-27 17:25
じゃんぬねっとさん、
返信、感謝いたします。

実際は、sakura editorで作成しており、そこではTabキー
を押したときに、記号を入れて分かるようにしています。
でも、ご指摘通り、vbTabとしてみました。

IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-01-27 17:45
MOOさん、
お付き合い頂いて感謝します。

FSOを使用しております。
また、現状、データは出力されているのですが、なぜか途中まで
しか書き出されていません。(例えば、件数が100件なら20件目の4番目のフィールドまで
しか書き出されていない。)

oo4oのバージョンとか関係していますでしょうか?
テスト機のクライアントは、8iですが、本番は9iです。

念のため、プログラムを提示しますので、よろしければ参照ください。

<プログラム一部抜粋>
<%@ language="vbscript" %>
<% Option Explicit %>

'FileSystemObjectの生成
Const ForReading = 1, ForWriting = 2, ForAppending = 8
set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists("C:\Inetpub\wwwroot\LipperApp\obj_data.tsv") = false Then
  objFSO.CreateTextFile("C:\Inetpub\wwwroot\LipperApp\obj_data.tsv")
Else
  objFSO.DeleteFile("C:\Inetpub\wwwroot\LipperApp\obj_data.tsv")
  objFSO.CreateTextFile("C:\Inetpub\wwwroot\LipperApp\obj_data.tsv")
End If

'Basp21オブジェクト作成
Set boji = Server.CreateObject("BASP21")

'Get the form value
strF_code = Request.Form("f_code")
strF_code = UCASE(strF_code)
strF_code = boji.StrConv(strF_code,
strF_code = replace(replace(strF_code," ","")," ","")



<%
Set objListData = objFSO.OpenTextFile("C:\Inetpub\wwwroot\LipperApp\obj_data.tsv",2,True)

For intCount_i = 0 to OraDS.Fields.count - 1
  strTitle = OraDS(intCount_i).Name

If intCount_i = OraDS.Fields.Count - 1 Then
  objListdata.WriteLine strTitle
Else
  objListData.Write strTitle & vbtab
End If

Next

strData = ""

Do Until OraDS.EOF
  For intCount_i = 0 to OraDS.Fields.count - 1
    strData = OraDS.Fields(intCount_i)

    If intCount_i = OraDS.Fields.count - 1 Then
       If IsNull(strData) Then
       objListData.WriteLine " "
    Else
       objListdata.WriteLine strData
    End If

Else

  objListdata.Write strData & vbTab ←ここでエラーがでます。

End If

strData = ""

Next


OraDS.MoveNext

Loop

objListData.Close

Set OraDS = Nothing
Set OraDB = Nothing
Set objFSO = Nothing
Set objListData = Nothing
Set boji = Nothing
%>
<% End If %>


GUCCHI
会議室デビュー日: 2005/10/27
投稿数: 17
投稿日時: 2006-01-27 18:14
エラー発生箇所にもNULLチェックが必要かと思うのですが、どうでしょう?

スキルアップ/キャリアアップ(JOB@IT)