發表文章

目前顯示的是有「VBScript」標籤的文章

ASP/VBS 自訂錯誤訊息

圖片
'Call Err.Raise(number, source, description) call err.raise(-99, "source-abc", "description-yyyyyyyyyyyyyyyy")

VBS常用常數變數值

'ADO Status '----------------------------- adStateClosed = 0              'The object is closed adStateOpen = 1                'The object is open adStateConnecting = 2          'The object is connecting adStateExecuting = 4          'The object is executing a command adStateFetching = 8            'The rows of the object are being retrieved '----------------------------- 'ADO Data Types '----------------------------- adEmpty = 0                    'No value adSmallInt = 2                'A 2-byte signed integer. adInteger = 3                  'A 4-byte signed integer. adSingle = 4                  'A single-precision f...

VBS呼叫Stored Procedure(接Output參數值)

假設有一個Oracle Package Stored Procedure,相關架構如下, 名稱:Package1.StoredProcedure1 參數1:input,料號 參數2:output,成本 VBS可以透過下面的寫法取得Output參數的回傳值, SET con = CreateObject("ADODB.Connection") con.Open DB_Connection_String strItemNo = "ABC00001" curItemCost = 0 SET cmd = CreateObject("ADODB.Command") cmd.CommandText = "Package1.StoredProcedure1" cmd.ActiveConnection = con cmd.NamedParameters = true cmd.CommandType = adCmdStoredProc cmd.Parameters.Append(cmd.CreateParameter("ItemNo", adVarChar, adParamInput, 50, strItemNo)) cmd.Parameters.Append(cmd.CreateParameter("ItemCost", adCurrency, adParamOutput, , curItemCost)) cmd.Execute msgbox "Item Cost: " & cmd.Parameters("ItemCost").Value Reference Web: http://docs.starquest.com/Supportdocs/techStarSQL/StarSQLODBC/Programming/SQ055_VBScript.shtml http://stackoverflow.com/questions/10017872/calling-sql-stored-procedure-with-output-parameter-in-vbscript

ASP網頁無法正常執行批次程式或VBS程式

圖片
有時因為一些特殊需求,不得不讓ASP網頁直接執行批次程式或VBS程式,雖然這不是個建議的解法,但在有條件下它卻是個可以快速解決問題的方法。 因為作業系統不同,所以設定方式也不大相同,以下用依作業系統別來說明, 1. Windows XP - IIS step-00 開啟IIS設定(它是要在「電腦管理」裡的「服務及應用程式」才看得到) step-01 可以從預設的網站設定(其以下的目錄均會套用相同權限)或針對特定的目錄設定。基本上中間應該可以只勾選「指令碼來源存取」、「讀取」、「寫入」三個選項,不過我是全選。 step-02 使用權限要選擇「指令碼及執行檔」 step-03 應用程式保護要選擇「低 (IIS處理序)」 step-04 在資料夾的「目錄安全設定」中的匿名存取及驗證控制,點選編輯後,在驗證方法視窗將帳戶改成權限較高的帳號,我是指定本機administrator 2. Windows 2003 Server - IIS step-00 開啟IIS step-01 可以從預設的網站設定(其以下的目錄均會套用相同權限)或針對特定的目錄設定。基本上中間應該可以只勾選「指令碼來源存取」、「讀取」、「寫入」三個選項,不過我是全選。 step-02 執行權限要選擇「指令碼及執行檔」 step-03 依「應用程式程式集區」指定的AppPool設定屬性 step-04 依【step-03】應用程式集區的名稱設定身分識別,並改成本機系統(不過會出現警告訊息,因為等同取得本機執行權限)

VBScript Err Object Properties and Methods

圖片
[Property] Number Description Source HelpContext HelpFile [Method] Clear Raise Example: #1 On Error Resume Next Err.Raise 6   ' Raise an overflow error. MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description & "  Source: " & Err.Source) Err.Clear   ' Clear the error. reference web: https://msdn.microsoft.com/en-us/library/a3c123d4(v=vs.84).aspx

安裝W3 Jmail元件(VBS範例)

W3 Jmail是一個可以拿來讓程式方便發送郵件的函式庫。 官方網站:http://www.dimac.net/ 下載檔案安裝完成後,還要做下列幾個動作才能被程式正常呼叫到。 STEP01-將jmail dll檔案複製到系統資料夾 1、Windows 95/98/Me系統,將jmail.dll copy to C:\Windows\System目錄下。 2、Windows NT/2000系統,將jmail.dll copy to C:\WINNT\System32目錄下。 3、Windows XP/WIN7/Vista系統,將jmail.dll copy to C:\Windows\System32目錄下。 4、如果您的系統是64位元的請將檔 copy to C:\Windows\SysWOW64目錄 STEP02-註冊dll元件 regsvr32 %windir%\system32\jmail.dll 程式範例 #VBS# Set jMail=wscript.CreateObject("JMail.Message") jMail.logging=true jMail.From="alex@mail.com" '寄件者Mail' jMail.FromName="Alex" '寄者名稱' jmail.addrecipient "alex@mail.com" '收者者Mail' jMail.Charset="utf-8" 'Mail 編碼' jMail.Subject="這是來自於VBS透過JMail發出的郵件" 'Mail 主旨' jMail.HTMLBody="這是來自於VBS透過JMail發出的郵件!" 'Mail Body' jMail...

在64位元系統下執行VBS

一般在32位元作業系統下執行VBSript(*.vbs)檔案只要點兩下就可以正常執行了,但同一個VBScript檔案拿到64位作業系統下就可能發生無法執行的錯誤。 原來在64位元作業系統下預設會使用64位元的VBScript,但如果我們VBSript裡有使用到32位元的COM或DLL,則會發生無法找到元件的錯誤,此時只要轉個彎,使用64位元作業系統下的32位元VBScript指令就可以了。 執行cmd後,再用下列批次指令執行寫好的VBScript檔案就可以了。 %windir%\SysWOW64\wscript.exe d:\abc\test.vbs PS. 前者為32位元的wscript, 後者為要執行的VBS檔案 reference web: http://blog.yam.com/yzl1218/article/63031542

透過ASP執行VBS

圖片
當有需要執行一個大量資料更新的邏輯時,若單純使用ASP程式雖然可以達到效果,但往往因為執行時間較長,導致一些問題產生, Request-Response時間很長時,若有其他在相同目錄下的網頁會發生無法正常瀏覽。原因是被判定為同一Session,必需要等上一個執行作業完成後,才會輪到後來執行的網頁解譯。 若想要中斷剛剛Submit的資料處理,經實測後,就算把IIS重新啟動(iisreset /restart),程序依然無法中止,必需要把Server重開機後,才會真正刪除程序 如果把資料處理邏輯改寫至VBS,而ASP只扮演啟動VBS的角色,則可以快速的結束Request-Reponse的作業,可以在Server利用微軟工具Process Explorer看到正在執行的程序(工作管理員只能看到多個wscript.exe的程序,無法知道實際執行的VBS檔名),可以視情況刪除程序。 <工作管理員> <Process Explorer> ※ Process Explorer需要設定欄位,可參考此網址 http://alexlucy99.blogspot.tw/2014/11/process-explorer.html 執行環境: Windows 2003 Server IIS ASP VBS ASP Code set wshell = CreateObject("WScript.Shell") wshell.run "cmd.exe /c cscript D:\VBS_TEST.vbs", 0, false set wshell = nothing 備註: 測試時發現一個狀況,如果執行的VBS有被Windows工作排程設定,ASP是無法正常執行VBS,原因尚未找出來。暫時可以解決的方法為工作排程連結一個批次檔(BAT),而該批次檔再去執行VBS,遶一下彎就可以了

比工作管理員好用的Process Explorer

圖片
微軟提供的Process Explorer工具可以看到更多的執行程式資訊。 下載網址: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx 例如有在開發VBS(VBScript)程序的人,若同時有多個程式在背景執行時,使用Windows內建的工作管理員看程序時,會面臨無法分辨出哪個才是你想要處理的程序,因為每個都顯示為wscript.exe。 如果使用Process Explorer時,則可以看到wscript真正執行的VBS檔案路徑及名稱了。 預設Process Explorer沒有顯示[Command Line]欄位,必需要手動設定一次。 STEP-1 在任何一個欄位標題上,按右鍵 STEP-2 在[Process Image]頁籤勾選[Command Line]選項即可

WshShell.run 函式的參數

set WshShell= CreateObject(“Wscript.Shell”) WshShell.run "notepad.exe",, run函數有三個參數,第一個參數是你要執行的程序的路徑,若路徑中存在空格,如 """C:\Program Files\QQ2006\QQ.exe""" ‘注:三個引號,第二個程序是窗口的形式,0是在後台運行;1表示正常運行;2表示激活程序並且顯示為最小化;3表示激活程序並且顯示為最大化;一共有10個這樣的參數如下表。 第三個參數是表示這個腳本是等待還是繼續執行,如果設為了true,腳本就會等待調用的程序退出後再向後執行。 其實,run做為函數,前面還有一個接受返回值的變量,一般來說如果返回為0,表示成功執行,如果不為0,則這個返回值就是錯誤代碼,可以通過這個代碼找出相應的錯誤。 intWindowStyle 說明 0 隱藏一個窗口並激活另一個窗口。 1 激活並顯示窗口。如果窗口處於最小化或最大化狀態,則系統將其還原到原始大小和位置。第一次顯示該窗口時,應用程序應指定此標志。 2 激活窗口並將其顯示為最小化窗口。 3 激活窗口並將其顯示為最大化窗口。 4 按最近的窗口大小和位置顯示窗口。活動窗口保持活動狀態。 5 激活窗口並按當前的大小和位置顯示它。 6 最小化指定的窗口,並按照 Z 順序激活下一個頂部窗口。 7 將窗口顯示為最小化窗口。活動窗口保持活動狀態。 8 將窗口顯示為當前狀態。活動窗口保持活動狀態。 9 激活並顯示窗口。如果窗口處於最小化或最大化狀態,則系統將其還原到原始大小和位置。還原最小化窗口時,應用程序應指定此標志。 10 根據啟動應用程序的程序狀態來設置顯示狀態。 Reference Web: http://programmersay.blogspot.tw/2008/12/wshshellrun.html

如何取得MSSQL新增資料後的自動識別欄位的值

圖片
在MSSQL資料欄位中,有一種欄位類別為自動識別, 此欄位特性為,insert into時不可以指定值,資料庫會在新增資料時自動給值,所以當資料新增後需求知道系統給什麼值來做後續處理時,則可以使用下列語法, 'VBS' Set conr = Wscript.CreateObject("ADODB.Connection") provider="Provider=sqloledb;Server=0.0.0.0;Database=db;UID=sa;PWD=123;" conr.Open provider '新增資料' sql = "insert into Table_1 (b) values('" & now & "') " conr.Execute(sql) '取得識別欄位值' set rsAdd = conr.Execute("SELECT @@IDENTITY") id=rsAdd(0) set rsAdd = Nothing conr.Close msgbox id Reference Web: http://a0726h77.blogspot.tw/2013/01/asp-connmdbexecutesql-insert-return.html

VBS也可以引用VBS

圖片
一直以來以為VBS只是個單檔作業的好用批次作業, 沒想到他還是可以引用其他已經寫好的VBS(內容包含了FUNCTION), 作法如下, 1.vbs Function Hello(name)   Hello="Hello " & name End Function 2.vbs executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile("1.vbs").readAll() msgbox Hello("Alex") 執行結果: reference web: http://stackoverflow.com/questions/316166/how-do-i-include-a-common-file-in-vbscript-similar-to-c-include

VBScript 常用語法

取得執行vbs檔案的路徑(包含vbs檔名) WScript.ScriptFullName 取得執行vbs檔案的路徑(不包含vbs檔名) Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName,"\"))