變數|過程|函數|指令碼|條件|語句 在上一期中作者向諸位簡要介紹了 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 語句的功能,使您可