[摘 要]本文以會(huì)計(jì)科目查詢?cè)O(shè)計(jì)為例,詳細(xì)分析與探討了利用ASP實(shí)現(xiàn)基于Web的信息查詢處理的基本原理、設(shè)計(jì)過(guò)程與實(shí)施方法,并提供了相應(yīng)的網(wǎng)頁(yè)代碼與相關(guān)說(shuō)明。
[關(guān)鍵詞]管理信息系統(tǒng);會(huì)計(jì)科目;信息查詢;ASP程序設(shè)計(jì);B/S模式
doi:10.3969/j.issn.1673-0194.2009.16.002
[中圖分類(lèi)號(hào)]F232[文獻(xiàn)標(biāo)識(shí)碼]A[文章編號(hào)]1673-0194(2009)16-0008-04
信息查詢是管理信息系統(tǒng)必備的基本功能,信息查詢操作則是管理信息系統(tǒng)最常見(jiàn)的基本操作之一。在B/S模式下,信息查詢功能實(shí)現(xiàn)的基本原理與操作步驟是:①用戶在瀏覽器端填寫(xiě)查詢表單,以確定待查找信息所應(yīng)滿足的條件;②用戶通過(guò)單擊“查找”按鈕(或功能類(lèi)似的按鈕),將查找信息的請(qǐng)求提交到服務(wù)器端;③服務(wù)器根據(jù)查找請(qǐng)求在相關(guān)數(shù)據(jù)庫(kù)表中搜索符合條件的記錄或信息,并進(jìn)行相關(guān)處理;④服務(wù)器將搜索與處理的結(jié)果傳送至瀏覽器端,供用戶瀏覽?;赪eb的信息查詢功能的設(shè)計(jì)和實(shí)施,主要是針對(duì)相關(guān)數(shù)據(jù)庫(kù)和數(shù)據(jù)表設(shè)計(jì)信息查詢表單界面及信息查詢處理網(wǎng)頁(yè)對(duì)應(yīng)的程序代碼,并將相關(guān)的文件保存在主目錄或與某個(gè)虛擬目錄對(duì)應(yīng)的實(shí)際目錄下。這樣,用戶就可以利用瀏覽器軟件運(yùn)行相關(guān)網(wǎng)頁(yè)代碼,以執(zhí)行相應(yīng)的查詢操作。
1 數(shù)據(jù)庫(kù)與數(shù)據(jù)表的結(jié)構(gòu)
信息查詢是對(duì)已存在數(shù)據(jù)庫(kù)表中的記錄或數(shù)據(jù)進(jìn)行查詢,所以信息查詢?cè)O(shè)計(jì)的前提是掌握相關(guān)數(shù)據(jù)庫(kù)的類(lèi)型及數(shù)據(jù)表的結(jié)構(gòu)。對(duì)會(huì)計(jì)科目查詢?cè)O(shè)計(jì)而言,就是要弄清楚賬務(wù)處理數(shù)據(jù)庫(kù)中會(huì)計(jì)科目數(shù)據(jù)表的結(jié)構(gòu)。假定賬務(wù)處理數(shù)據(jù)庫(kù)和會(huì)計(jì)科目數(shù)據(jù)表是利用Microsoft Office Access建立的,賬務(wù)處理數(shù)據(jù)庫(kù)的文件名為zwcl.mdb,會(huì)計(jì)科目數(shù)據(jù)表名為kjkm,并假定kjkm數(shù)據(jù)表的結(jié)構(gòu)如表1所示,表內(nèi)已保存了相關(guān)會(huì)計(jì)科目的記錄。
2 查詢表單界面及相關(guān)網(wǎng)頁(yè)代碼設(shè)計(jì)
2.1 查詢表單界面與查詢請(qǐng)求
查詢界面可設(shè)計(jì)成不同的形式,但應(yīng)滿足簡(jiǎn)明、易用、美觀等界面設(shè)計(jì)原則,并盡可能提供較多的檢索途徑。本文所設(shè)計(jì)的會(huì)計(jì)科目查詢界面如圖1所示,其中待查詢的項(xiàng)目可從下拉列表框中選擇,包括與kjkm數(shù)據(jù)表中的字段相對(duì)應(yīng)的選項(xiàng),分別為科目編號(hào)、科目名稱、借貸方向、期初余額,默認(rèn)的選項(xiàng)為“科目名稱”。從下拉列表選擇相應(yīng)的項(xiàng)時(shí),在待查詢的值所對(duì)應(yīng)的區(qū)域可輸入與待查詢的項(xiàng)目對(duì)應(yīng)的數(shù)據(jù),若單擊“查找”按鈕,應(yīng)能夠?qū)⒈韱谓缑嫔系臄?shù)據(jù)所對(duì)應(yīng)的查詢請(qǐng)求傳遞到服務(wù)器進(jìn)行相關(guān)處理(例如,選擇待查詢項(xiàng)目為“科目名稱”,輸入待查詢值為“現(xiàn)金”,則單擊“查找”按鈕時(shí),就會(huì)將查詢“科目名稱”為“現(xiàn)金”的請(qǐng)求傳遞到服務(wù)器進(jìn)行處理);若單擊“重填”按鈕,則可使表單重置為如圖1所示的界面,以便于繼續(xù)選擇待選查詢項(xiàng)目和輸入待查詢的值。
2.2 查詢界面對(duì)應(yīng)的網(wǎng)頁(yè)代碼
可以利用UltraEdit、EditPlus或Windows操作系統(tǒng)中自帶的“記事本”等任一文本編輯軟件,建立會(huì)計(jì)科目查詢界面對(duì)應(yīng)的網(wǎng)頁(yè)文件AccountItemSearch.htm,并將該文件保存在計(jì)算機(jī)硬盤(pán)的一個(gè)實(shí)際目錄下,再在“Internet信息服務(wù)”控制臺(tái)中將該實(shí)際目錄設(shè)置為虛擬目錄kemu。文件AccountItemSearch.htm中的網(wǎng)頁(yè)代碼對(duì)應(yīng)如下:
<form action=\"accountitemsearch.asp\" method=\"post\">
<table border=1 align=center>
<caption><font face=\"隸書(shū)\" size=5>會(huì)計(jì)科目查詢</font></caption>
<tr>
<td align=right>請(qǐng)選擇待查詢的項(xiàng)目:</td>
<td>
<select name=\"search\" size=1>
<o(jì)ption value=\"kmbh\">科目編號(hào)
<o(jì)ption value=\"kmmc\" selected>科目名稱
<o(jì)ption value=\"jdfx\">借貸方向
<o(jì)ption value=\"qcye\">期初余額
</select>
</td>
</tr>
<tr>
<td align=right>請(qǐng)輸入待查詢的值:</td>
<td><input type =\"text\" name=\"zhi\"></td>
</tr>
</table>
<br>
<table border=0 align=center>
<tr>
<td align=right><input type=\"submit\" value=\"查找\"></td>
<td><input type=\"reset\" value=\"重填\"></td>
</tr>
</table>
</form>
2.3 查詢界面網(wǎng)頁(yè)代碼的有關(guān)說(shuō)明
文件AccountItemSearch.htm所述代碼的運(yùn)行結(jié)果是如圖1所示的信息查詢界面。其中,<form>與</form>標(biāo)記對(duì)之間的代碼定義了一個(gè)表單,<form>標(biāo)記中的action屬性指明處理該表單的ASP文件為accountitemsearch.asp,method屬性表明此表單用“POST”方法向ASP文件傳遞數(shù)據(jù),可使得ASP使用Request.Form集合來(lái)讀取表單的數(shù)據(jù)。
<table border=1 align=center>與</table>標(biāo)記對(duì)之間的代碼的運(yùn)行結(jié)果是一個(gè)表格,<tr>與</tr>標(biāo)記對(duì)指定表格的一行,<td>與</td>標(biāo)記對(duì)指定一個(gè)單元格的內(nèi)容。其中,<table border=1 align=center>指明表格居中,表格的邊框?qū)挾?或border屬性)為1;<caption><font face=\"隸書(shū)\" size=5>會(huì)計(jì)科目查詢</font></caption>指定了表格上方的標(biāo)題及字體字號(hào);<select name=\"search\" size=1>至</select>之間的代碼定義了默認(rèn)選項(xiàng)為“科目名稱”的下拉列表框,該下拉列表框的name屬性為search,其下拉列表項(xiàng)包括科目編號(hào)、科目名稱、借貸方向、期初余額,對(duì)應(yīng)的value屬性分別為kmbh、kmmc、jdfx、qcye;<input type =\"text\" name=\"zhi\">表示一個(gè)name屬性為zhi的文本框。
<br>是一個(gè)回車(chē)換行標(biāo)記,這里用來(lái)輸出一個(gè)空行,可使該查詢界面的布局更合理。之后的<table border=0 align=center>與</table>之間的代碼表示一個(gè)不顯示邊框(border屬性為0)、對(duì)齊方式為居中的表格,單元格內(nèi)分別是type屬性為submit的“查找”按鈕和type屬性為reset的“重填”按鈕。
3 信息查詢處理
3.1 查詢處理邏輯與處理結(jié)果界面
圖1中,待查詢的項(xiàng)目可以從下拉列表中選擇,可選項(xiàng)分別是科目編號(hào)、科目名稱、借貸方向、期初余額,其中科目名稱是默認(rèn)選項(xiàng);待查詢的值需要從鍵盤(pán)輸入,并對(duì)應(yīng)于從下拉列表選擇的項(xiàng)目。選擇待查詢項(xiàng)目并輸入對(duì)應(yīng)的值后,可選擇單擊“重填”按鈕或“查找”按鈕。若單擊“重填”按鈕,則待查詢項(xiàng)目自動(dòng)選擇默認(rèn)的選項(xiàng),待查詢的值的輸入?yún)^(qū)自動(dòng)清空。若單擊“查找”按鈕,就向服務(wù)器提交了信息查詢的服務(wù)請(qǐng)求;服務(wù)器接收查詢請(qǐng)求后,立即在數(shù)據(jù)庫(kù)中搜索與處理,并將搜索與處理的結(jié)果傳送至瀏覽器,供用戶使用。例如,在如圖1所示的界面中,當(dāng)輸入待查詢的值為“現(xiàn)金”時(shí),單擊“查找”按鈕可返回如圖2所示的查詢結(jié)果。單擊圖2中的“[返回] ”鏈接,可返回如圖1所示的界面繼續(xù)進(jìn)行查詢。
另外,當(dāng)圖1中待查詢項(xiàng)選擇為期初余額時(shí),若輸入的值不為數(shù)值型數(shù)據(jù),則返回“期初余額不對(duì)!”及超鏈接“[請(qǐng)單擊此鏈接返回] ”信息,單擊該超鏈接后可返回上一查詢界面。
當(dāng)待查詢項(xiàng)選擇為期初余額,且輸入的值是正確的數(shù)值型數(shù)據(jù)時(shí),或當(dāng)待查詢項(xiàng)選擇為其余項(xiàng)(科目編號(hào)、科目名稱、借貸方向)時(shí),若數(shù)據(jù)庫(kù)中沒(méi)有相關(guān)記錄,則返回“未找到相關(guān)記錄!”及超鏈接“[請(qǐng)單擊此鏈接返回] ”信息,單擊該超鏈接后可返回上一查詢界面;若數(shù)據(jù)庫(kù)中有相關(guān)記錄,則以表格形式輸出查詢結(jié)果及超鏈接“[返回] ”,單擊該鏈接后可轉(zhuǎn)到如圖1所示的查詢界面。
3.2 查詢處理對(duì)應(yīng)的網(wǎng)頁(yè)代碼
為實(shí)現(xiàn)上述查詢處理邏輯,并返回相應(yīng)的查詢結(jié)果,仍可利用UltraEdit、EditPlus或“記事本”等軟件建立查詢處理對(duì)應(yīng)的網(wǎng)頁(yè)文件accountitemsearch.asp,注意該文件名必須與會(huì)計(jì)科目查詢請(qǐng)求文件AccountItemSearch.htm中<form>標(biāo)記的action屬性指定的文件名一致,并且需要保存在同一目錄下。會(huì)計(jì)科目查詢處理文件accountitemsearch.asp的網(wǎng)頁(yè)代碼對(duì)應(yīng)如下:
<%
strSearch=request(\"search\")
if strSearch=\"qcye\" then
if isnumeric(request(\"zhi\")) then
strSQL=\"select * from kjkm where \"strSearch\"=\"request(\"zhi\")
else
response.write \"期初余額不對(duì)!<br>\"
response.write \"<a href=' javascript:history.back()'>[請(qǐng)單擊此鏈接返回] </a>\"
response.end
end if
else
strSQL=\"select * from kjkm where \"strSearch\"=' \"request(\"zhi\")\"' \"
end if
set conn=server.createobject(\"ADODB.Connection\")
conn.open=\"Driver={Microsoft Access Driver (*.mdb)};DBQ=\"server.mappath(\"zwcl.mdb\")
set rs=server.createobject(\"ADODB.Recordset\")
rs.open strSQL,conn
if rs.eof then
response.write \"無(wú)找到相關(guān)記錄!<br>\"
response.write \"<a href=' javascript:history.back()'>[請(qǐng)單擊此鏈接返回] </a>\"
else
response.write \"<table align=center border=1>\"
response.write \"<caption><font face=隸書(shū) size=5>查詢結(jié)果</font></caption>\"
response.write \"<tr>\"
response.write \"<th>科目編號(hào)</th><th>科目名稱</th><th>借貸方向</th><th>期初余額</th>\"
response.write \"</tr>\"
do
response.write \"<tr>\"
response.write \"<td>\"rs(\"kmbh\")\"</td>\"
response.write \"<td>\"rs(\"kmmc\")\"</td>\"
response.write \"<td>\"rs(\"jdfx\")\"</td>\"
response.write \"<td>\"rs(\"qcye\")\"</td>\"
response.write \"</tr>\"
rs.movenext
loop until rs.eof
response.write \"</table><p align=center>\"
response.write \"<a href='AccountItemSearch.htm'>[返回] </a>\"
response.write \"</p>\"
end if
%>
3.3 查詢處理網(wǎng)頁(yè)代碼的相關(guān)說(shuō)明
accountitemsearch.asp的代碼中,分隔符<%與%>是ASP的腳本標(biāo)記對(duì),strSearch=request(\"search\")表示由變量strSearch接收從瀏覽器端取得的與下拉列表框相對(duì)應(yīng)的數(shù)據(jù),其中,request(\"search\")是從瀏覽器端獲得下拉列框中對(duì)應(yīng)選項(xiàng)的Value屬性值,search是下拉列表框的Name屬性(參見(jiàn)2.2和2.3節(jié)),當(dāng)從下拉列表框選擇科目編號(hào)、科目名稱、借貸方向或期初余額時(shí),strSearch的值分別對(duì)應(yīng)于kmbh、kmmc、jdfx、qcye。由于查詢表單界面對(duì)應(yīng)的網(wǎng)頁(yè)文件AccountItemSearch.htm中<form>標(biāo)記將其method屬性設(shè)定為POST方法,所以,request(\"search\")在這里也可寫(xiě)成request.form(\"search\"),表示查詢處理程序采用Request對(duì)象的Form集合來(lái)獲取表單中的數(shù)據(jù)。同理,request(\"zhi\")也可寫(xiě)成request.form(\"zhi\")。
分支語(yǔ)句if strSearch=\"qcye\" then …… else …… end if表示的處理邏輯是,當(dāng)變量strSearch對(duì)應(yīng)于qcye(對(duì)應(yīng)于從瀏覽器端的下拉列表框中選擇了“期初余額”)時(shí),那么,如果接收到的瀏覽器端輸入?yún)^(qū)的數(shù)據(jù)是數(shù)值型數(shù)據(jù),則變量strSQL就代表一個(gè)按相應(yīng)期初余額進(jìn)行查詢的SQL語(yǔ)句;如果接收到的瀏覽器端輸入?yún)^(qū)的數(shù)據(jù)不是數(shù)值型數(shù)據(jù),就向?yàn)g覽器端返回“期初余額不對(duì)!”及超鏈接“[請(qǐng)單擊此鏈接返回] ”等信息,并終止本網(wǎng)頁(yè)代碼的執(zhí)行。當(dāng)變量strSearch不為qcye(表示從瀏覽器端的下拉列表框中選擇的不是“期初余額”,而可能是“科目編號(hào)”、“科目名稱”、或“借貸方向”)時(shí),則變量strSQL就代表一個(gè)按相應(yīng)科目編號(hào)、科目名稱、或借貸方向進(jìn)行查詢的SQL語(yǔ)句。其中,isnumeric()是數(shù)值型數(shù)據(jù)測(cè)試函數(shù),request(\"zhi\")是從瀏覽器端獲得數(shù)據(jù)輸入?yún)^(qū)的數(shù)據(jù)(zhi是輸入?yún)^(qū)文本框的Name屬性,參見(jiàn)2.2和2.3節(jié)),response.write的功能是向?yàn)g覽器端輸出處理結(jié)果,response.end的功能是結(jié)束本程序的執(zhí)行。注意strSQL對(duì)應(yīng)的SQL語(yǔ)句中,where之后至少要有一個(gè)空格,例如:strSQL=\"select * from kjkm where qcye=200.39\";又如:strSQL=\"select * from kjkm where kmmc=' 現(xiàn)金' \"。語(yǔ)句<a href='javascript:history.back()'>[請(qǐng)單擊此鏈接返回] </a>表示一個(gè)超鏈接,單擊該鏈接時(shí)網(wǎng)頁(yè)轉(zhuǎn)到前一個(gè)頁(yè)面。
set conn=server.createobject(\"ADODB.Connection\")至rs.open strSQL,conn之間各語(yǔ)句的功能分別是建立連接對(duì)象conn、與數(shù)據(jù)庫(kù)zwcl.mdb建立連接、創(chuàng)建記錄集對(duì)象rs、打開(kāi)記錄集對(duì)象取得數(shù)據(jù)。其中,rs.open strSQL,conn執(zhí)行后,與瀏覽器端表單界面所述條件相匹配的查詢結(jié)果(或者說(shuō),與strSQL所述查詢語(yǔ)句相對(duì)應(yīng)的結(jié)果)就被保存在記錄集對(duì)象rs中。
分支語(yǔ)句if rs.eof then …… else …… end if表示的處理邏輯是,如果記錄集對(duì)象rs中無(wú)記錄,則向?yàn)g覽器端返回“未找到相關(guān)記錄!”及超鏈接“[請(qǐng)單擊此鏈接返回] ”信息,否則,就以表格的形式返回查詢結(jié)果及超鏈接“[返回] ”。其中,語(yǔ)句response.write \"<caption><font face=隸書(shū) size=5>查詢結(jié)果</font></caption>\"的功能是向?yàn)g覽端輸出表格的標(biāo)題,該語(yǔ)句之后的代碼功能是輸出表格每欄的標(biāo)題、循環(huán)輸出各行的記錄、輸出“[返回] ”超鏈接。代碼中,rs.eof用于測(cè)試記錄指針是否位于最后一條記錄之后,do與loop until rs.eof 是直到型循環(huán)結(jié)構(gòu),記錄指針位于最后一條記錄之后時(shí)退出循環(huán);<th>與</th>用于標(biāo)記一個(gè)單元格中的內(nèi)容,并使單元格的內(nèi)容以粗體出現(xiàn),常用于表格中的標(biāo)題欄;rs(\"kmbh\")、rs(\"kmmc\")中的kmbh、kmmc等分別與kjkm數(shù)據(jù)表中的字段相對(duì)應(yīng)(參見(jiàn)表1);rs.movenext用于將記錄指針移到下一條記錄處,通常,輸出一條記錄后就需要將指針移到下一條記錄;response.write \"<a href='AccountItemSearch.htm'>[返回] </a>\"表示在瀏覽器端建立超鏈接“[返回] ”,單擊該超鏈接時(shí)可返回到AccountItemSearch.htm表示的初始查詢界面。
4 信息查詢功能的實(shí)現(xiàn)
ASP是一種服務(wù)器端的腳本語(yǔ)言,它只能在服務(wù)器環(huán)境下才能正常運(yùn)行,需要在Windows NT、Windows 2000、Windows XP及更高版本的操作系統(tǒng)上添加和安裝IIS組件;ASP對(duì)客戶端沒(méi)有任何特殊要求,只要有一個(gè)普通的瀏覽器即可。計(jì)算機(jī)安裝IIS組件后,就可以利用“Internet信息服務(wù)”控制臺(tái)設(shè)置主目錄及虛擬目錄。在Windows操作系統(tǒng)的控制面板雙擊“管理工具”圖標(biāo),再在出現(xiàn)的“管理工具”界面雙擊“Internet信息服務(wù)”選項(xiàng),即可打開(kāi)“Internet信息服務(wù)”控制臺(tái)進(jìn)行相關(guān)設(shè)置。
可將賬務(wù)處理文件zwcl.mdb、AccountItemSearch.htm、accountitemsearch.asp保存在安裝有IIS的計(jì)算機(jī)的主目錄或某一個(gè)目錄下。如果這些文件沒(méi)有保存在主目錄下,則需要在“Internet信息服務(wù)”控制臺(tái)將這些文件所在的目錄設(shè)置為虛擬目錄,并指定虛擬目錄的別名(例如可將別名指定為kemu)。該計(jì)算機(jī)作為服務(wù)器上網(wǎng)后,用戶可以在Internet上任何客戶端的URL地址欄輸入以下格式的網(wǎng)址來(lái)實(shí)現(xiàn)基于Web的信息查詢功能:http://服務(wù)器域名或IP地址/虛擬目錄別名/accountitemsearch.htm。
主要參考文獻(xiàn)
[1] 李國(guó)紅. 基于Web的會(huì)計(jì)科目輸入處理的設(shè)計(jì)與實(shí)現(xiàn)[J]. 中國(guó)管理信息化,2008(13):4-8.
[2] 陳建偉,等. ASP動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)教程[M]. 第2版.北京:清華大學(xué)出版社,2005.