初音 玲 HATSUNE, Akira
|
Visual Basic Script Edition(以下VBS)と聞いて、まず思い浮かぶのが、Active Server Page(ASP)などのサーバーサイドスクリプトを記述することや、IEに読み込ませて動作させるクライアントサイドスクリプトを記述することだろう。しかし、これから注目されるのは、VBSでWindows Scripting Host(以下WSH)のスクリプトが記述できることだと思う(表1)。 | VBSのバージョン
|
| Windows Scripting Hostとは? |
|---|
cscript arg.vbs パラメータ

Option Explicit
Dim objArgs
Dim iintLoop
Set objArgs = WScript.Arguments
For iintLoop = 0 to objArgs.Count - 1
WScript.Echo objArgs(iintLoop)
Next
|
Option Explicit
Dim objArgs
' Dim iintLoop
Set objArgs = WScript.Arguments
For iintLoop = 0 to objArgs.Count - 1
WScript.Echo objArgs(iintLoop)
Next
|


Dim gintA
Dim gintB
main
Sub Main
WScript.echo "main"
End Sub
| WScriptオブジェクト | ||
| プロパティ | Application | Idispatchインターフェイスを返す |
| Arguments | コマンドライン引数の集合であるArgumentsコレクションオブジェクトを返す | |
| FileName | Wscript.exeのファイル名を絶対パスで返す | |
| Interactive | Wscriptが対話モードかバッチモードのいずれで動作しているかを返す | |
| Name | Wscriptの登録名を返す | |
| Path | Wscript.exeへの絶対パスを返す | |
| ScriptFullName | スクリプトファイル名を絶対パスで返す | |
| ScriptName | スクリプトファイル名を返す | |
| Version | WSHのバージョンを返す | |
| メソッド | CreateObject | ActiveXコンポーネントを作成する |
| Echo | ウィンドウまたはDOSプロンプトに文字列を表示する | |
| Quit | 指定したエラーコードでスクリプトを終了する | |
| WshArgumentsオブジェクト Wscript.Argumentsプロパティを経由して参照する | ||
| プロパティ | Item | n番目のコマンドライン引数を返す |
| Count | コマンドライン引数の個数を返す | |
| Oracle Objects for OLEを使う |
|---|
cscript oo4o.vbs vbm scott/tiger
Dim objSess ' Oracle Objects for OLEオブジェクト
Dim objDb ' OraDatabase
Dim objDs ' OraDynaset
Dim objCol ' OraFields
Dim strError
Dim ilngLoop
Dim strRange
Dim objXL ' Excelオブジェクト
Dim objArgs ' コマンドライン引数
On Error Resume Next
Set objArgs = WScript.Arguments
' (1)ActiveX DLLであるoo4oを起動します
WScript.echo "oo4oを起動します。"
Set objSess = WScript.CreateObject("OracleInProcServer.XOraSession")
If Err>0 Then
MsgBox "OracleInProcServer Create Error. Err=" & Err
End If
' (2)SQL*Net接続文字列を指定して、Oracleと接続します
WScript.echo "Oracleと接続します。"
Set objDb = objSess.OpenDatabase(objArgs(0), objArgs(1), CLng(0))
Call subErrDisp
' (3)SQL文を指定してレコードを取得します
WScript.echo "SELECT文を実行します。"
Set objDs = objDb.DbCreateDynaset("select * from emp", CLng(12))
' (4)Excelと接続します
WScript.echo "Excelと接続します。"
Set objXL = WScript.CreateObject("Excel.Application")
objXL.Workbooks.Add
' (5)タイトルを設定します
WScript.echo "タイトルを設定します。"
Set objCol = objDs.Fields
For ilngLoop = 1 To objCol.Count
objXL.Cells(1, ilngLoop).Value = objCol(ilngLoop - 1).Name
Next
' (6)CopyToClipboardを使って、シートにデータを配置します
WScript.echo "データを設定します。"
objDs.CopyToClipboard -1
objXL.Range("A2").Select
objXL.ActiveSheet.Paste
' (7)レコードセットを開放します
Set objDs = Nothing
' (8)Oracleとの接続を開放します
Set objDb = Nothing
' (9)oo4oとの接続を開放します
Set objSess = Nothing
exitOpen:
On Error Resume Next
Set objDs = Nothing
Set objDb = Nothing
Set objSess = Nothing
WScript.echo "Excelを表示します。"
objXL.Visible = True
Sub subErrDisp()
Dim strErrText ' エラー文字列
If objSess.LastServerErr=0 Then
If objDs.LastServerErr=0 Then
If Err>0 Then
strErrText = Error
End If
Else
strErrText = objDs.LastServerErrText
objDs.LastServerErrReset
End If
Else
strErrText = objSess.LastServerErrText
objSess.LastServerErrReset
End If
' エラーがあればそれを表示する
If strErrText<>"" Then
WScript.echo strErrText
WScript.Quit
End If
End Sub
|
Dim objSess ' Oracle Objects for OLEオブジェクト
Dim objDb ' OraDatabase
Dim objDs ' OraDynaset
Dim objCol ' OraFields
Dim strError
Dim ilngLoop
Dim strRange
Dim objXL ' Excelオブジェクト
Dim strHost ' データベース別名
Dim strConn ' 接続文字列
On Error Resume Next
strHost = InputBox("データベース別名",,"")
strConn = InputBox("接続文字列",,"")
' (1)ActiveXDLLであるoo4oを起動します
MsgBox "oo4oを起動します。",vbOkOnly+vbExclamatin
Set objSess = WScript.CreateObject("OracleInProcServer.XOraSession")
If Err>0 Then
MsgBox "OracleInProcServer Create Error. Err=" & Err
End If
' (2)SQL*Net接続文字列を指定して、Oracleと接続します
MsgBox "Oracleと接続します。",vbOkOnly+vbExclamatin
Set objDb = objSess.OpenDatabase(strHost, strConn, CLng(0))
Call subErrDisp
' (3)SQL文を指定してレコードを取得します
MsgBox "SELECT文を実行します。",vbOkOnly+vbExclamatin
Set objDs = objDb.DbCreateDynaset("select * from emp", CLng(12))
' (4)Excelと接続します
MsgBox "Excelと接続します。",vbOkOnly+vbExclamatin
Set objXL = WScript.CreateObject("Excel.Application")
objXL.Workbooks.Add
objXL.Visible = True
' (5)タイトルを設定します
MsgBox "タイトルを設定します。",vbOkOnly+vbExclamatin
Set objCol = objDs.Fields
For ilngLoop = 1 To objCol.Count
objXL.Cells(1, ilngLoop).Value = objCol(ilngLoop - 1).Name
Next
' (6)CopyToClipboardを使って、シートにデータを配置します
MsgBox "データを設定します。",vbOkOnly+vbExclamatin
objDs.CopyToClipboard -1
objXL.Range("A2").Select
objXL.ActiveSheet.Paste
' (7)レコードセットを開放します
MsgBox "終了処理をします。",vbOkOnly+vbExclamatin
Set objDs = Nothing
' (8)Oracleとの接続を開放します
Set objDb = Nothing
' (9)oo4oとの接続を開放します
Set objSess = Nothing
exitOpen:
On Error Resume Next
Set objDs = Nothing
Set objDb = Nothing
Set objSess = Nothing
Sub subErrDisp()
Dim strErrText ' エラー文字列
If objSess.LastServerErr=0 Then
If objDs.LastServerErr=0 Then
If Err>0 Then
strErrText = Error
End If
Else
strErrText = objDs.LastServerErrText
objDs.LastServerErrReset
End If
Else
strErrText = objSess.LastServerErrText
objSess.LastServerErrReset
End If
'エラーがあればそれを表示する
If strErrText<>"" Then
MsgBox strErrText,vbOkOnly+vbExclamatin
WScript.Quit
End If
End Sub
|
|
VBS5.0の新機能 SQLライクに文字列をコードとして扱う |
|---|
Dim intA
Dim intB
intB = 10
intA = EVAL("5 + 9 - intB")
WScript.echo intA
Dim intA Dim intB intB = 10 intA = 5 + 10 - intB WScript.echo intA
Dim intA Dim intB Dim strProc intB = 10 strProc = "Sub Proc: intA = 5 + 9 - intB: End Sub" execute strProc Proc WScript.echo intA
