在上一期中作者向諸位簡要介紹了ASP 腳本語言之一VBScript 的一些基本常識,本期將繼續給大家講解VBScript 的腳本編寫方法,並通過展示VBScript 在ASP 程序編寫過程中的一系列實例使大家對VBScript 有更進一層的理解。
大家在學習了腳本語言VBScript 的變量、常量和過程的基本概念後,本期將繼續向各位介紹VBScript 的函數和語法。
函數和過程一樣都是命名了的代碼塊,但它們卻有很大的區別,過程完成程序任務,函數則返回值。我們可以這樣理解,過程像一個完整的句子,而函數則像一個單詞。舉個例子,當你想獲取某個數的平方根,你只要將該數傳給VBScript 的Sqr() 函數,此函數會立即返回該數的平方根。如:A=sqr(9)
則A=3。熟練掌握腳本語言的函數將給你編寫ASP 程序帶來極大的方便,就以上一期結尾處作者佈置給大家的課後練習來說,如果你對腳本語言的函數掌握不夠全面,那麼解決如此之小的一個問題將很有可能花費你相當大的精力。現在讓我們來回顧一下這道課後練習。作者正在用ASP 製作一套基於WEB 的BBS 系統,希望能在其中添加一項特殊功能,即當任何用戶登陸該BBS 後都能夠查閱近七天來所有新發布的信息。
如果你不熟悉VBScrip,就不會知道VBScrip 本身提供了一個用來取得日期之間的差或和的函數DateSerial,它的語法如下:
DateSerial(year, month, day)
如果你要指定一個日期,例如:1998 年11 月10 日,那麼DateSerial 函數中每個參數的取值範圍都應該是可接受的,即日的取值應在1 和31 之間,月的取值應在1 和12 之間。但是,也可以使用表示某日之前或之後的年、月、日數目的數值表達式為每個參數指定相對日期。以下樣例中使用了數值表達式代替絕對日期。在這裡,DateSerial 函數返回1998 年11 月10 日之前二十年(1990-20) 零兩個月(11-2) 又一天(10-1) 的日期:即1978 年9 月9 日。程序如下:Datep=DateSerial(1998-20, 11-2,10-1)
對於year 參數,若取值範圍是從0 到99,則被解釋為1900 到1999 年。對於此範圍之外的year 參數,則使用四位數字表示年份(例如1800 年)。當任何一個參數的取值超出可接受的範圍時,則會適當地進位到下一個較大的時間單位。例如,如果指定了35 天,則這個天數將被解釋成一個月加上多出來的日數,多出來的日數取決於其年份和月份。但是如果參數值超出-32,768 到32,767 的範圍,或者由三個參數指定(無論是直接還是通過表達式指定)的日期超出了可以接受的日期範圍,就會發生錯誤。當我們了解並掌握了函數DateSerial 的使用方法後,再來看看作者佈置的這道題目,一切就迎刃而解了。下面我將程序中的此部分代碼公佈如下: itemp=DateSerial(Year(date), month(date), day(date)-7)
itemp=DateValue(itemp)
sql=Select * from message Where message.creatime Between #&date&# And #&itemp&#
在這裡我們又接觸到了一組函數Year,month,day,它們是用來得到一個日期的年、月、日。 date 是常數,表示今天日期,而函數DateValue 則是將字符串變量轉化為日期格式的變量。在本段程序的第三行,我們第一次接觸到了標準的SQL 查詢語句,這句語句是什麼意思呢?
Select是標準的SQL 數據庫查詢命令,通過SELECT 語句我們可以在數據庫中檢索數據,並將查詢結果提供給用戶,此處的*表示查詢該名為message的數據庫中的所有記錄,而where的作用是設定一個查詢條件,是為了將數據庫中符合條件的記錄取出來,message.creatime是一個儲存了數據庫中記錄創建日期的變量。將整句語句連起來理解就是:查詢名為message 的數據庫中的所有記錄,並將其中創建日期在今天和今天以前七日以內的所有記錄存儲在變量sql 中。可能由於大家第一次接觸SQL 語句,一時間無法完全理解它的作用,不過不用擔心在今後的章節中作者將專門用一期給大家介紹SQL 的使用方法。
通過上面的學習,大家應該已經能夠理解函數在程序中的作用,當然我們不必去死背函數,但要做到熟練運用只有一條捷徑-- 多實踐。接下來讓我們來看看VBScript 的基本語法。
了解編程語言的朋友一定知道在程序中控製程序流程的語句主要可以分為條件語句和循環語句,在VBScript 中可使用以下條件語句: If...Then...Else 語句
Select Case 語句
If...Then...Else 語句用於計算條件是否為True 或False,並且根據計算結果指定要運行的語句。通常,條件是使用比較運算符對值或變量進行比較的表達式,If...Then...Else 語句可以按照需要進行嵌套。
讓我們來創建兩個範例文件:if1.asp 和if2.asp
將以下語句剪貼到記事簿中,並保存為if1.asp( 注意:請將程序中<後的空格去掉) < html>
< head>
< TITLE>if1.asp< /TITLE>
< /head>< body bgcolor=#FFFFFF>
< form action=if2.asp method=get>
Your First Name< INPUT NAME=FirstName MaxLength=20>< p>
Your Last Name< INPUT NAME=LastName MaxLength=20>< p>
< INPUT TYPE=submit>< INPUT TYPE=reset>
< /form>
< /body>
< /html>
將以下語句剪貼到記事簿中,並保存為if2.asp < html>
< head>
< TITLE>ifrespond.asp< /TITLE>
< /head>
< % fname=request.querystring(Firstname)
lname=request.querystring(Lastname)
If fname=George and lname=Washington then %>
Hi.You must be the first president!
< % else %>
Hi!Nice to Meet You
< %end if %>
< /body>
< /html>
asp1.asp 產生一個文本輸入框,要求用戶輸入姓、名,
asp2.asp 則是用IF 語句判斷用戶輸入的姓名是否為George Washington, 並做出相應的反饋。在此我們遇到了一個ASP 的內建對象request,通過使用request 對象可以訪問任何用HTTP 請求傳遞的信息,包括從HTML 表格中用POST 方法或GET 方法傳遞的參數、cookie 和用戶認證。而QueryString 集合檢索HTTP 查詢字符串中變量的值,HTTP 查詢字符串由問號(?) 後的值指定。如:
http://localhost/if2.asp?Firstname=George&Lastname=Washington
生成值為Firstname=George&Lastname=Washington 的變量名字符串。關於ASP 對像作者將在今後的幾篇裡重點講述。
If...Then...Else 語句的一種變形允許您從多個條件中選擇,即添加ElseIf 子句以擴充If...Then...Else 語句的功能,使您可以控制基於多種可能的程序流程。
我們將asp2.asp 的程序部分擴充如下: < %
fname=lcase(request.querystring(Firstname))
lname=lcase(request.querystring(Lastname))
If fname=george and lname=washington then %>
Hi.You must be the first president!< p>
< % elseIf fname=ronald and lname=reagan then %>
Hi.You must be the actor president!< p>
< % elseIf fname=jimmy and lname=carter then %>
Hi.You must be the peanut farmer president!< p>
< % elseIf fname=naoko or fname=charles then %>
Hi.Your name reminds me of someone,but I am not sure who!< p>
< % else %>
Hi!Nice to Meet You
< % end if %>
可以添加任意多個ElseIf 子句以提供多種選擇。但使用多個ElseIf 子句經常會使程序變得很累贅。在多個條件中進行選擇的更好方法是使用Select Case 語句。
Select Case 結構提供了If...Then...ElseIf 結構的一個變通形式,可以從多個語句塊中選擇執行其中的一個。 Select Case 語句提供的功能與If...Then...Else 語句類似,但是可以使代碼更加簡練易讀。 Select Case 結構在其開始處使用一個只計算一次的簡單測試表達式。表達式的結果將與結構中每個Case 的值比較。如果匹配,則執行與該Case 關聯的語句塊,我們同樣可以用Select Case 語句來寫asp2.asp 文件:
< %
fname=lcase(request.querystring(Firstname))
lname=lcase(request.querystring(Lastname))
name=fname+lname
Select case name
case georgewashington
response.write Hi.You must be the first president!< p>
case ronaldreagan
response.write Hi.You must be the actor president!< p>
case jimmycarter
response.write Hi.You must be the peanut farmer president!< p>
case naokocharles
response.write Hi.Your name reminds me of someone,but I am not sure who!< p>
case else
response.write Hi!Nice to Meet You
End Select %>
請注意Select Case 結構只計算開始處的一個表達式,並且只計算一次,而If...Then...ElseIf 結構計算每個ElseIf 語句的表達式,這些表達式可以各不相同。因此僅當每個ElseIf 語句計算的表達式都相同時,才可以使用Select Case 結構代替If...Then...ElseIf 結構。 Select Case 語句也是可以是嵌套的,每一層嵌套的Select Case 語句必須有與之匹配的End Select 語句。
以上給大家介紹的腳本語言VBScript 的函數和條件語句的使用方法,由於篇幅的緣故不能詳細展開,希望各位有志學習ASP 的朋友,能在課後進行一定程度的自學和練習。在日常開發ASP 應用程序的過程中作者本人日漸體會到了腳本語言的重要性,靈活運用腳本語言將非但可以大大提高ASP 應用程序的開發過程,給廣大網站製作人員節省大量的時間,而且還能夠增強ASP 應用程序的執行效率和功能。欲善其事必先利其器,因此作者在此強烈建議諸君,熟練掌握腳本語言,這將對你的ASP 程序開發大有幫助。由於本文不是VBScript 教程,因此只能用較小的篇幅給大家簡要介紹一些VBScript 基本常識,在下一期介紹完VBScript 的循環語句後,我們將正式開始學習ASP 的內建對象,要深入VBScript,建議大家找些教材進行自學。如果你在看完本文後有任何問題請及時Mail 我,如果你有什麼好的建議也請來信告知,謝謝。