在上一期中作者向諸位簡(jiǎn)要介紹了 ASP 腳本語(yǔ)言之一 VBScript 的一些基本常識(shí),本期將繼續(xù)給大家講解 VBScript 的腳本編寫(xiě)方法,并通過(guò)展示 VBScript 在 ASP 程序編寫(xiě)過(guò)程中的一系列實(shí)例使大家對(duì) VBScript 有更進(jìn)一層的理解。
大家在學(xué)習(xí)了腳本語(yǔ)言 VBScript 的變量、常量和過(guò)程的基本概念后,本期將繼續(xù)向各位介紹 VBScript 的函數(shù)和語(yǔ)法。
函數(shù)和過(guò)程一樣都是命名了的代碼塊,但它們卻有很大的區(qū)別,過(guò)程完成程序任務(wù),函數(shù)則返回值。我們可以這樣理解,過(guò)程象一個(gè)完整的句子,而函數(shù)則象一個(gè)單詞。舉個(gè)例子,當(dāng)你想獲取某個(gè)數(shù)的平方根,你只要將該數(shù)傳給 VBScript 的 Sqr() 函數(shù),此函數(shù)會(huì)立即返回該數(shù)的平方根。如:
A=sqr(9)
則 A=3。熟練掌握腳本語(yǔ)言的函數(shù)將給你編寫(xiě) ASP 程序帶來(lái)極大的方便,就以上一期結(jié)尾處作者布置給大家的課后練習(xí)來(lái)說(shuō),如果你對(duì)腳本語(yǔ)言的函數(shù)掌握不夠全面,那么解決如此之小的一個(gè)問(wèn)題將很有可能花費(fèi)你相當(dāng)大的精力?,F(xiàn)在讓我們來(lái)回顧一下這道課后練習(xí)。
“作者正在用 ASP 制作一套基于 WEB 的 BBS 系統(tǒng),希望能在其中添加一項(xiàng)特殊功能,即當(dāng)任何用戶登陸該 BBS 后都能夠查閱近七天來(lái)所有新發(fā)布的信息。”
如果你不熟悉 VBScrip,就不會(huì)知道 VBScrip 本身提供了一個(gè)用來(lái)取得日期之間的差或和的函數(shù) DateSerial,它的語(yǔ)法如下:
DateSerial(year, month, day)
如果你要指定一個(gè)日期,例如:1998 年 11 月 10 日,那么 DateSerial 函數(shù)中每個(gè)參數(shù)的取值范圍都應(yīng)該是可接受的,即日的取值應(yīng)在 1 和 31 之間,月的取值應(yīng)在 1 和 12 之間。但是,也可以使用表示某日之前或之后的年、月、日數(shù)目的數(shù)值表達(dá)式為每個(gè)參數(shù)指定相對(duì)日期。以下樣例中使用了數(shù)值表達(dá)式代替絕對(duì)日期。在這里,DateSerial 函數(shù)返回 1998 年 11 月 10 日之前二十年 (1990-20) 零兩個(gè)月 (11-2) 又一天 (10-1) 的日期:即 1978 年 9 月 9 日。程序如下:
Datep=DateSerial(1998-20, 11-2,10-1)
對(duì)于 year 參數(shù),若取值范圍是從 0 到 99,則被解釋為 1900 到 1999 年。對(duì)于此范圍之外的 year 參數(shù),則使用四位數(shù)字表示年份(例如 1800 年)。當(dāng)任何一個(gè)參數(shù)的取值超出可接受的范圍時(shí),則會(huì)適當(dāng)?shù)剡M(jìn)位到下一個(gè)較大的時(shí)間單位。例如,如果指定了 35 天,則這個(gè)天數(shù)將被解釋成一個(gè)月加上多出來(lái)的日數(shù),多出來(lái)的日數(shù)取決于其年份和月份。但是如果參數(shù)值超出 -32,768 到 32,767 的范圍,或者由三個(gè)參數(shù)指定(無(wú)論是直接還是通過(guò)表達(dá)式指定)的日期超出了可以接受的日期范圍,就會(huì)發(fā)生錯(cuò)誤。
當(dāng)我們了解并掌握了函數(shù) DateSerial 的使用方法后,再來(lái)看看作者布置的這道題目,一切就迎刃而解了。下面我將程序中的此部分代碼公布如下: itemp=DateSerial(Year(date), month(date), day(date)-7)
itemp=DateValue(itemp)
sql="Select * from message Where message.creatime Between #"&date&"# And #"&itemp&"# "
在這里我們又接觸到了一組函數(shù) Year,month,day,它們是用來(lái)得到一個(gè)日期的年、月、日。date 是常數(shù),表示今天日期,而函數(shù) DateValue 則是將字符串變量轉(zhuǎn)化為日期格式的變量。在本段程序的第三行,我們第一次接觸到了標(biāo)準(zhǔn)的 SQL 查詢語(yǔ)句,這句語(yǔ)句是什么意思呢?
“Select”是標(biāo)準(zhǔn)的 SQL 數(shù)據(jù)庫(kù)查詢命令,通過(guò) SELECT 語(yǔ)句我們可以在數(shù)據(jù)庫(kù)中檢索數(shù)據(jù),并將查詢結(jié)果提供給用戶,此處的“*”表示查詢?cè)撁麨椤癿essage”的數(shù)據(jù)庫(kù)中的所有記錄,而“where”的作用是設(shè)定一個(gè)查詢條件,是為了將數(shù)據(jù)庫(kù)中符合條件的記錄取出來(lái),“message.creatime”是一個(gè)儲(chǔ)存了數(shù)據(jù)庫(kù)中記錄創(chuàng)建日期的變量。將整句語(yǔ)句連起來(lái)理解就是:查詢名為 message 的數(shù)據(jù)庫(kù)中的所有記錄,并將其中創(chuàng)建日期在今天和今天以前七日以內(nèi)的所有記錄存儲(chǔ)在變量 sql 中。可能由于大家第一次接觸 SQL 語(yǔ)句,一時(shí)間無(wú)法完全理解它的作用,不過(guò)不用擔(dān)心在今后的章節(jié)中作者將專(zhuān)門(mén)用一期給大家介紹 SQL 的使用方法。
通過(guò)上面的學(xué)習(xí),大家應(yīng)該已經(jīng)能夠理解函數(shù)在程序中的作用,當(dāng)然我們不必去死背函數(shù),但要做到熟練運(yùn)用只有一條捷徑 -- 多實(shí)踐。接下來(lái)讓我們來(lái)看看 VBScript 的基本語(yǔ)法。
了解編程語(yǔ)言的朋友一定知道在程序中控制程序流程的語(yǔ)句主要可以分為條件語(yǔ)句和循環(huán)語(yǔ)句,在 VBScript 中可使用以下條件語(yǔ)句: If...Then...Else 語(yǔ)句
Select Case 語(yǔ)句
If...Then...Else 語(yǔ)句用于計(jì)算條件是否為 True 或 False,并且根據(jù)計(jì)算結(jié)果指定要運(yùn)行的語(yǔ)句。通常,條件是使用比較運(yùn)算符對(duì)值或變量進(jìn)行比較的表達(dá)式,If...Then...Else 語(yǔ)句可以按照需要進(jìn)行嵌套。
讓我們來(lái)創(chuàng)建兩個(gè)范例文件:if1.asp 和 if2.asp
將以下語(yǔ)句剪貼到記事簿中,并保存為 if1.asp( 注意:請(qǐng)將程序中“<”后的空格去掉 ) < 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>
將以下語(yǔ)句剪貼到記事簿中,并保存為 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 產(chǎn)生一個(gè)文本輸入框,要求用戶輸入姓、名,如下圖:
asp2.asp 則是用 IF 語(yǔ)句判斷用戶輸入的姓名是否為“George Washington”, 并做出相應(yīng)的反饋。在此我們遇到了一個(gè) ASP 的內(nèi)建對(duì)象 request,通過(guò)使用 request 對(duì)象可以訪問(wèn)任何用 HTTP 請(qǐng)求傳遞的信息,包括從 HTML 表格中用 POST 方法或 GET 方法傳遞的參數(shù)、cookie 和用戶認(rèn)證。而 QueryString 集合檢索 HTTP 查詢字符串中變量的值,HTTP 查詢字符串由問(wèn)號(hào) (?) 后的值指定。如:
http://localhost/if2.asp?Firstname=George&Lastname=Washington
生成值為 "Firstname=George&Lastname=Washington" 的變量名字符串。關(guān)于 ASP 對(duì)象作者將在今后的幾篇里重點(diǎn)講述。
If...Then...Else 語(yǔ)句的一種變形允許您從多個(gè)條件中選擇,即添加 ElseIf 子句以擴(kuò)充 If...Then...Else 語(yǔ)句的功能,使您可以控制基于多種可能的程序流程。
我們將 asp2.asp 的程序部分?jǐn)U充如下: < %
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 %>
可以添加任意多個(gè) ElseIf 子句以提供多種選擇。但使用多個(gè) ElseIf 子句經(jīng)常會(huì)使程序變得很累贅。在多個(gè)條件中進(jìn)行選擇的更好方法是使用 Select Case 語(yǔ)句。
Select Case 結(jié)構(gòu)提供了 If...Then...ElseIf 結(jié)構(gòu)的一個(gè)變通形式,可以從多個(gè)語(yǔ)句塊中選擇執(zhí)行其中的一個(gè)。Select Case 語(yǔ)句提供的功能與 If...Then...Else 語(yǔ)句類(lèi)似,但是可以使代碼更加簡(jiǎn)練易讀。Select Case 結(jié)構(gòu)在其開(kāi)始處使用一個(gè)只計(jì)算一次的簡(jiǎn)單測(cè)試表達(dá)式。表達(dá)式的結(jié)果將與結(jié)構(gòu)中每個(gè) Case 的值比較。如果匹配,則執(zhí)行與該 Case 關(guān)聯(lián)的語(yǔ)句塊,我們同樣可以用 Select Case 語(yǔ)句來(lái)寫(xiě) 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 %>
請(qǐng)注意 Select Case 結(jié)構(gòu)只計(jì)算開(kāi)始處的一個(gè)表達(dá)式,并且只計(jì)算一次,而 If...Then...ElseIf 結(jié)構(gòu)計(jì)算每個(gè) ElseIf 語(yǔ)句的表達(dá)式,這些表達(dá)式可以各不相同。因此僅當(dāng)每個(gè) ElseIf 語(yǔ)句計(jì)算的表達(dá)式都相同時(shí),才可以使用 Select Case 結(jié)構(gòu)代替 If...Then...ElseIf 結(jié)構(gòu)。Select Case 語(yǔ)句也是可以是嵌套的,每一層嵌套的 Select Case 語(yǔ)句必須有與之匹配的 End Select 語(yǔ)句。
以上給大家介紹的腳本語(yǔ)言 VBScript 的函數(shù)和條件語(yǔ)句的使用方法,由于篇幅的緣故不能詳細(xì)展開(kāi),希望各位有志學(xué)習(xí) ASP 的朋友,能在課后進(jìn)行一定程度的自學(xué)和練習(xí)。在日常開(kāi)發(fā) ASP 應(yīng)用程序的過(guò)程中作者本人日漸體會(huì)到了腳本語(yǔ)言的重要性,靈活運(yùn)用腳本語(yǔ)言將非但可以大大提高 ASP 應(yīng)用程序的開(kāi)發(fā)過(guò)程,給廣大網(wǎng)站制作人員節(jié)省大量的時(shí)間,而且還能夠增強(qiáng) ASP 應(yīng)用程序的執(zhí)行效率和功能。欲善其事必先利其器,因此作者在此強(qiáng)烈建議諸君,熟練掌握腳本語(yǔ)言,這將對(duì)你的 ASP 程序開(kāi)發(fā)大有幫助。由于本文不是 VBScript 教程,因此只能用較小的篇幅給大家簡(jiǎn)要介紹一些 VBScript 基本常識(shí),在下一期介紹完 VBScript 的循環(huán)語(yǔ)句后,我們將正式開(kāi)始學(xué)習(xí) ASP 的內(nèi)建對(duì)象,要深入 VBScript,建議大家找些教材進(jìn)行自學(xué)。如果你在看完本文后有任何問(wèn)題請(qǐng)及時(shí) Mail 我,如果你有什么好的建議也請(qǐng)來(lái)信告知,謝謝。