通用網(wǎng)頁(yè)查詢函數(shù)的設(shè)計(jì)與應(yīng)用

時(shí)間:2022-10-08 04:07:00

導(dǎo)語(yǔ):通用網(wǎng)頁(yè)查詢函數(shù)的設(shè)計(jì)與應(yīng)用一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

通用網(wǎng)頁(yè)查詢函數(shù)的設(shè)計(jì)與應(yīng)用

1.引言

隨著人們對(duì)信息化潮流的逐漸認(rèn)識(shí),各種信息在Internet上的和檢索就變得非常的重要。特別是使用B/S模式的信息和檢索,由于它的簡(jiǎn)單性、靈活性,越來(lái)越得到了廣泛的應(yīng)用?,F(xiàn)在,經(jīng)常被人們采用的B/S模式的開(kāi)發(fā)工具有ASP、PHP、JSP等,這些開(kāi)發(fā)工具簡(jiǎn)單易學(xué)、功能強(qiáng)大,為各種信息在Internet上的和檢索提供了強(qiáng)有力的幫助。但是,隨著信息量的逐漸爆炸,如果仍然采用針對(duì)特定信息設(shè)計(jì)專(zhuān)用程序的傳統(tǒng)辦法的話,顯然將導(dǎo)致信息的效率非常地低。

為此,筆者研究了一種通用信息與檢索的技術(shù)方案,使用這套方案,將極大地減輕開(kāi)發(fā)者的工作量,節(jié)約成本。本文介紹的便是這套技術(shù)方案中的一個(gè)非常重要的組成部分——基于ASP的通用網(wǎng)頁(yè)查詢函數(shù)設(shè)計(jì)應(yīng)用

2.通用網(wǎng)頁(yè)查詢函數(shù)的設(shè)計(jì)

通用網(wǎng)頁(yè)查詢函數(shù)的功能主要是:根據(jù)調(diào)用者提供的各種參數(shù),在后臺(tái)數(shù)據(jù)庫(kù)管理系統(tǒng)中進(jìn)行檢索,最后將檢索結(jié)果以二維數(shù)組的形式返回給調(diào)用者。

為了實(shí)現(xiàn)上述功能,實(shí)現(xiàn)該函數(shù)的主要思想是:根據(jù)調(diào)用者提供的各種參數(shù),生成對(duì)應(yīng)的SQL語(yǔ)句,接下來(lái)與后臺(tái)數(shù)據(jù)庫(kù)管理系統(tǒng)建立連接、提取數(shù)據(jù)、斷開(kāi)連接,最后將檢索結(jié)果以二維數(shù)組的形式返回給調(diào)用者。

該函數(shù)的輸入?yún)?shù)有:后臺(tái)數(shù)據(jù)庫(kù)管理系統(tǒng)的代號(hào)(如0代表SQLServer、1代表VFP等)、數(shù)據(jù)源名、表名(可以是單表,也可以是多表連接)或視圖名、all/distinct關(guān)鍵字、top關(guān)鍵字、字段名數(shù)組、where條件、groupby子句/orderby字句、檢索結(jié)果存放的二維數(shù)組名等。

該函數(shù)的返回值為邏輯型,True代表查詢過(guò)程中未出現(xiàn)錯(cuò)誤,否則,若為False說(shuō)明查詢過(guò)程中出現(xiàn)了錯(cuò)誤。

下面給出經(jīng)調(diào)試過(guò)的通用網(wǎng)頁(yè)查詢函數(shù)的源代碼。

functiondata_getting(param_database_code,param_dsn_name,param_table_name,

param_all,param_top,param_field_names(),ByRefdata(),param_condition,

param_other,ByRefrcount,ByReffcount,ByReffieldsname())

onerrorresumenext

''''生成查詢語(yǔ)句

ifparam_all=truethen

query="select"

else

query="selectdistinct"

endif

query=query+param_top+""

ifparam_field_names(0)="*"then''''查詢?nèi)孔侄?/p>

query=query+"*"

else

d_g_i=0

fcount=0

foreachiteminparam_field_names

ifparam_field_names(d_g_i)<>""then

query=query+param_field_names(d_g_i)+","

fcount=fcount+1''''記錄集列數(shù)

endif

d_g_i=d_g_i+1

next

endif

query=left(query,len(query)-1)+"from"+param_table_name''''去掉最后一個(gè)逗號(hào)(全部字段:去掉空格)

iflen(param_condition)>0then

query=query+"where"+param_condition

endif

iflen(param_other)>0then

query=query+""+param_other

endif

''''打開(kāi)記錄集

setconntemp=server.createobject("ADODB.Connection")

conntemp.ConnectionString=param_dsn_name

conntemp.Open

conntemp.errors.clear

Setrstemp=Server.CreateObject("ADODB.Recordset")

rstemp.ActiveConnection=conntemp

ifparam_database_code=0then‘代表后臺(tái)數(shù)據(jù)庫(kù)是SQLSERVER

rstemp.CursorType=3

rstemp.LockType=1

elseifparam_database_code=1then‘代表后臺(tái)數(shù)據(jù)庫(kù)是VFP

rstemp.CursorType=1

rstemp.LockType=1

else

…‘代表后臺(tái)數(shù)據(jù)庫(kù)是其它數(shù)據(jù)庫(kù)管理系統(tǒng)(代碼略)

endif

rstemp.Source=query

rstemp.open

‘判斷查詢過(guò)程中是否出現(xiàn)錯(cuò)誤

ifconntemp.errors.count>0then

data_getting=false

rcount=0

else

‘如果查詢過(guò)程中未出現(xiàn)錯(cuò)誤,將查詢結(jié)果存放到指定的二維數(shù)組中

rcount=rstemp.recordcount''''記錄集行數(shù)

ifrcount=0then

data_getting=true

else

data_getting=true

ifparam_field_names(0)="*"then''''查詢?nèi)孔侄?/p>

fcount=rstemp.fields.count

endif

ReDimdata(rcount-1,fcount-1),fieldsname(fcount-1)

ford_g_i=1torcount

ford_g_j=1tofcount

data(d_g_i-1,d_g_j-1)=trim(rstemp.fields(d_g_j-1).value)

ifd_g_i=1then

fieldsname(d_g_j-1)=rstemp.fields(d_g_j-1).name

endif

next

rstemp.movenext

next

endif

endif

rstemp.close

setrstemp=nothing

conntemp.close

setconntemp=nothing

endfunction

3.通用網(wǎng)頁(yè)查詢函數(shù)的應(yīng)用

在筆者參與的各類(lèi)基于Web的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程中,全部使用了前文給出的通用網(wǎng)頁(yè)查詢函數(shù)。利用<!--#includefile="data_getting.inc"-->語(yǔ)句(通用網(wǎng)頁(yè)查詢函數(shù)被保存為一個(gè)獨(dú)立的文件data_getting.inc),在需要進(jìn)行數(shù)據(jù)查詢的網(wǎng)頁(yè)中,嵌入該函數(shù),然后在ASP頁(yè)面只需調(diào)用該函數(shù),就能得到希望得到的查詢結(jié)果,從而大大減輕了編程的工作量,并便于ASP頁(yè)面的簡(jiǎn)化和美化。

4.結(jié)束語(yǔ)

本文給出的通用網(wǎng)頁(yè)查詢函數(shù),以及筆者開(kāi)發(fā)的其它的一些通用函數(shù)(用于執(zhí)行一系列SQL命令的函數(shù)、用于調(diào)用數(shù)據(jù)庫(kù)端存儲(chǔ)過(guò)程的函數(shù)等),大大減輕了在系統(tǒng)開(kāi)發(fā)過(guò)程中的工作量,基本實(shí)現(xiàn)了代碼復(fù)用的目的,希望能給從事數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)者一些有益的啟示。

參考文獻(xiàn):

1.劉福太等譯ASP3高級(jí)編程機(jī)械工業(yè)出版社2000年

2.彭萬(wàn)波等著ASP開(kāi)發(fā)基礎(chǔ)與范例電子工業(yè)出版社2002年