• ベストアンサー

IIS+VBScriptでの処理待ちについて

WindowsXP上でIIS+VBScriptで構築しております。 次のような感じで処理の進捗状況をバー形式で表示させたい のですが、WScript.Sleepが使えない環境らしく、以下を 実行するとWScript.Sleepの行でエラーになるため、それに 変わる書き方を教えていただけないでしょうか。 よろしくお願いいたします。 do while i < 10 Response.Write "■" i = i + 1 WScript.Sleep(1000) loop

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

  • ベストアンサー
noname#259269
noname#259269
回答No.1

do while i < 10 Response.Write "■" i = i + 1 WScript.Sleep(1000) loop もしかしてこの↑コーディングは、<% ~ %> の中に書いていたりしますか? サーバ側で Sleep させても、クライアント側にそのつど反映される訳ではありませんよ? 処理がクライアント(ブラウザ)で動くか、サーバ(IIS)内で動くかを理解されていますか? その辺があやふやに見えますので、整理・理解されるべきかと思いますね。 とりあえず、以下にクライアントだけで動くコードサンプルを載せますので、a.htm などの名前でデスクトップに保存し、IEで実行してみてください。 <HTML> <HEAD> <script type="text/VBScript"> Dim intervalId Dim counter counter = 10 intervalId = SetInterval("ShowWait", 500) Sub ShowWait() Dim c Set c = document.getElementById("spText") c.innerText = c.innerText & "■" counter = counter - 1 If counter <= 0 Then ClearInterval(intervalId) End If End Sub </script> </HEAD> <BODY> <span id="spText"/> </BODY> </HTML>

crossone
質問者

お礼

edp3142様、ご回答ありがとうございます。 edp3142様の仰るとおり、どちらで処理されているかの理解が 出来ていなかったようです。 私の書いたコードは確かに<% ~ %>の中に書いており、サーバ側で 処理させておりましたが、私がやりたいことはクライアント側で 処理させるべきだったとご指摘いただいて気付きました…。 いただきましたサンプルも大変勉強になりました。 本当にありがとうございました。

関連するQ&A

  • HTML + VBScript で Sleep できない

    お世話になります。ご教授ください。 類似の質問が既にあるのかもしれませんが、質問させていただきます。。。 HTML上に記述するVBScriptでは、WScriptは使用できないという記事を見かけます。 実際、HTML+VBScriptで使用すると、 変数は宣言されていません:'WScript' とエラーが出ました。 WSH は WScript のインスタンスを読み込むことができないうんぬん、と書かれていました。 書きたいことは、 WScript.Sleep 1000 です。 もしくは、これに変わる何かがしたいです。 外部ファイル化(.vbs)を試してみましたが、ダメでした。 ==== サンプル(Sample.vbs) ==== Option Explicit MsgBox "start" Dim Idx = 0 Do While Idx <> 3 WScript.Sleep 1000 MsgBox Idx Idx = Idx + 1 Loop WScript.Sleep 1000 MsgBox "end" ================ <html> <head> <meta http-equiv="Content-Script-Type" content="text/vbscript"> <script language="VBScript" type="text/vbscript" src="sample.vbs"></script> </head> … という感じです。 上記はあくまでサンプルですが、最終的には「ループの中で」待ち状態、になるようにしたいです。 Do While ある条件 1秒待ち ある条件に、なるかならないか Loop (setTimeout を使用する例が書かれていましたが、それではループ制御は走り続け、CPUが痛い目に合いました。。。) もしかして、WScript は使用できるのに、記述ミスかもしれませんし。。。 できない場合は、それに変わる案などいただけるとありがたいです。 よろしくお願いします。

  • VBScriptで<% %>の組み合わせについて

    お世話になります。 今、次のようなプログラムを書いています。 <% If Request.Form("Reference") = "スイッチ" Then Do Until ObjRS.EOF Response.Write"<input type=""radio"" value="""& ObjRS("番号")&""" name=""Check"">" <td width="5%"><%=ObjRS("日付")%></td> <td width="5%"><%=ObjRS("名前")%></td>     ObjRS.MoveNext LOOP End If %> このような書き方をすると、実行したときに ObjRS.MoveNext LOOP %> と画面上に表示されてしまい、ループがうまくいきません。 たぶん、ObjRS.MoveNextあたりからプログラムと認知されないで、 HTMLの記述だと認知されているんだと思うんですけど、修正方法がわかりません。 何か方法はあるのでしょうか? <参考> 開発言語:VBScript DB:SQLServer2000 開発マシンOS:WindowsXP Professional サーバOS:Windows2000 Server 開発ツール:FrontPage2000

  • VBScriptでファイルからgoogle検索

    カレントディレクトリの.txtファイルを1行づつ読み込み、google検索したいのですが、ウィンドウが複数立ち上がってしまい1ウィンドウでタブで表示したいのですが上手くいきません。。と、テキストファイル名もタイトルタグで表示したいです。どなたかご存知でしたらご教授願います。以下、書きかけのソースになります。 ---------------------------------------------------------------------------------- use_ie Sub use_ie() 'Option Explicit 'On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim objWshShell ' WshShell オブジェクト If Err.Number = 0 Then Set objWshShell = WScript.CreateObject("WScript.Shell") Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then For Each FLO In objFSO.GetFolder(objWshShell.CurrentDirectory).Files path = FLO.Path If Right(path, 4) = ".txt" Then Set objFile = objFSO.OpenTextFile(path, 1) Do While objFile.AtEndOfStream <> True Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True 'ie.Navigate "about:blank" 'ie.Document.Write "<title>path</title>" ie.Navigate "http://www.google.co.jp/" ',2048 '新規タブで開く waitIE ie ie.Document.getElementById("q").Value = objFile.ReadLine WScript.Sleep 100 ' 検索ボタンクリック ie.Document.all("btnG").Click waitIE ie strURL = "https://www.google.co.jp/" If ie.LocationURL = strURL Then ie.Quit Set ie = Nothing End If Loop objFile.Close End If Next Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing Set objWshShell = Nothing Set ie = Nothing End Sub ' IEがビジー状態の間待ちます Sub waitIE(ie) Do While ie.Busy = True Or ie.readystate <> 4 WScript.Sleep 100 Loop WScript.Sleep 1000 End Sub

  • DoEvents

    VBSでDoEventsは使えないのでしょうか? *************************** Dim ObjIE dim i Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://oshiete.goo.ne.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Set ObjIE = Nothing *************************** だと、エラーになりました。 Wscript.sleep 3000 ならエラーにならずにコードは動きました。 VBAならDoEventsは使えるのに VBSで使えない理由を教えてください。

  • VBScriptで検索結果をタブ表示したいです。

    カレントディレクトリの.txtファイルを1行づつgoogle検索したいのですが、ウィンドウが複数立ち上がってしまい1ウィンドウでタブで表示したいのですが上手くいきません。。と、テキストファイル名もタイトルタグで表示したいです。どなたかご存知でしたらご教授願います。以下、書きかけのソースになります。 ---------------------------------------------------------------------------------- use_ie Sub use_ie() 'Option Explicit 'On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim objWshShell ' WshShell オブジェクト If Err.Number = 0 Then Set objWshShell = WScript.CreateObject("WScript.Shell") Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then For Each FLO In objFSO.GetFolder(objWshShell.CurrentDirectory).Files path = FLO.Path If Right(path, 4) = ".txt" Then Set objFile = objFSO.OpenTextFile(path, 1) Do While objFile.AtEndOfStream <> True Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True 'ie.Navigate "about:blank" 'ie.Document.Write "<title>path</title>" ie.Navigate "http://www.google.co.jp/" ',2048 '新規タブで開く waitIE ie ie.Document.getElementById("q").Value = objFile.ReadLine WScript.Sleep 100 ' 検索ボタンクリック ie.Document.all("btnG").Click waitIE ie strURL = "https://www.google.co.jp/" If ie.LocationURL = strURL Then ie.Quit Set ie = Nothing End If Loop objFile.Close End If Next Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing Set objWshShell = Nothing Set ie = Nothing End Sub ' IEがビジー状態の間待ちます Sub waitIE(ie) Do While ie.Busy = True Or ie.readystate <> 4 WScript.Sleep 100 Loop WScript.Sleep 1000 End Sub

  • 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

  • wshでDOSコマンドを利用するには。 パイプ処理

    http://www.okweb.ne.jp/kotaeru.php3?q=305516 の続きです。 wshでDOSコマンドのnetstat -nの値をメッセージボックスで表示するには、次のスクリプトの”コマンド”の部分にnetstat -nを入れることで可能です。 (FlossenEngel 様作成) ------------------------------------- Set WshShell = WScript.CreateObject("WScript.Shell") Set objExec = WshShell.Exec("コマンド") Do While objExec.Status = 0 WScript.Sleep(100) Loop sout = "" Do While Not objExec.StdOut.AtEndOfStream sout = sout & objExec.StdOut.ReadLine & Chr(13) & Chr(10) Loop MsgBox sout ----------------------------------------------- さて、netstat -n|find " ESTABLISHED" というぐあいに パイプ処理を行うにはどうすればよいでしょうか? Set objExec = WshShell.Exec("netstat -n|find " ESTABLISHED" ") とするとエラーになります。 "を入れ子にできないようですね。 解決方法ご存知の方おしえてくださいませ。

  • VBScriptの読込でのSkipLineの動き

    VBScriptでSkipLineで ファイル読み込みで1行ずつ読み飛ばしをしているのですが、 そこで質問があります。 以下のサンプルを実行すると、 「Microsoft VBScript 実行時エラー: ファイルの最後を超えた入力を行おうとしました。」 が出力され処理が終了します。 ですが、エラーがあっても無視して継続させる 「On Error Resume Next ~ On Error Goto 0」 の記述を行うと期待した結果となります。 エラーが合っても無視しろですから処理が行われるのは当たり前ですが、 1行スキップなのに、何故、エラーとなるのでしょうか。 また、その「On Error Resume Next」の記述をせず対処する方法は あるのでしょか。 ------------------------------------------------- Option Explicit Dim fs Dim fin Dim dir Dim path_in Dim strTemp Set fs = CreateObject("Scripting.FileSystemObject") dir = fs.GetParentFolderName(WSH.ScriptFullName) path_in = fs.BuildPath(dir, "test.txt") Set fin = fs.OpenTextFile(path_in, 1) Do While fin.AtEndOfStream <> True strTemp = fin.ReadLine fin.SkipLine WScript.Echo strTemp Loop fin.Close [test.txt] これは1行目です。 これは2行目です。 これは3行目です。 これは4行目です。 これは5行目です。

  • VBSでフォームに値を繰り返し入れる方法で悩んでいます

    VBScriptでフォームに値を入れることを繰り返したいのですがどうもうまくいかずに悩んでいます。いい方法を教えて下さい。 指定ページを開いた後に If objIE.Document.URL = strURL Then Set objIN = objIE.Document.getElementByTagName("INPUT") objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop Else objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop End If 以下省略 といったように1回でログインできなかった場合何度か入力するプログラムなのですが最初のElseIfの後のところで「オブジェクトがありません」となってしまいます。 ページも遷移してないのですが何故かオブジェクトがなくなってしまいます。 そういった対策をすればよいのでしょうか? お願いします。

  • VBscriptでコマンドラインへ発行したい

    VBscriptでコマンドプロンプトを起動させテキストを発行させることで悩んでおります。 コマンドラインのツールを実行させそこへテキストに記述された内容を実行させたいと思っています。 Dim strCOM For i = 1 to 15 strCOM = "cmd /C C:\○○○○\△△△△.exe 'ここがわかりません 'テキストファイルを流したいのですが・・・・ 'コマンド名を仮に@@@@とします。 "@@@@ D:\HEPPOKO" & Right("000" & CStr(i), 4) & ".txt" 'をコマンドライン上に流したいのですが・・・ Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec(strCOM) FileCopy "D:\HEPPOKO" & Right("000" & CStr(i), 4) & ".txt", "D:\終了\HEPPOKO" & Right("000" & CStr(i), 4) & ".txt" 'ここにSleep関数?で5分後とカウントアップにしたいのですが調べてみてもちょっと検討がつかなかったので・・・ '教えていただけないでしょうか? Next

専門家に質問してみよう