龔顯卿 蒲實
摘 要 對信息進(jìn)行方便快捷檢索是數(shù)據(jù)庫系統(tǒng)需要實現(xiàn)的一大重要功能。通過多重變量的使用,實現(xiàn)對多個字段進(jìn)行模糊檢索功能,提高素材檢索效率,也有助于程序的模塊化設(shè)計。
關(guān)鍵詞 PowerBuilder;數(shù)據(jù)庫;字段;模糊檢索;多重變量;視音頻素材
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
文章編號:1671-489X(2018)10-0039-03
Realization of Multi-field Fuzzy Retrieval about Video Audio Material based on PB//GONG Xianqing, PU Shi
Abstract Convenient and quick retrieval of information is an impor-
tant function of database system. In this paper, the fuzzy retrieval function of multiple fields is realized through the use of multiple variables, which improves the efficiency of the material retrieval and
the modular design of the program.
Key words PowerBuilder; database; filed; fuzzy retrieval; multiple variables; video audio material
1 前言
隨著教育信息化的深入發(fā)展,“只管數(shù)據(jù)采集不顧數(shù)據(jù)維護(hù)的粗放式管理模式比較普遍”[1],為了解決這樣的現(xiàn)象,人們需要設(shè)計和實現(xiàn)多種多樣的信息管理系統(tǒng),對越來越多的教育教學(xué)信息進(jìn)行管理。信息管理系統(tǒng)的一大主要功能就是方便人們對信息進(jìn)行查詢,以便對信息再利用。在對信息進(jìn)行查詢過程中,系統(tǒng)用戶并不總是能準(zhǔn)確知道所要查詢信息的準(zhǔn)確屬性。以一個視頻素材為例,用戶可能不知道它的準(zhǔn)確名稱、格式、上傳者、上傳日期、主要內(nèi)容等。針對這樣的情況,信息管理系統(tǒng)應(yīng)當(dāng)提供多種查詢方式供用戶選擇:1)單一字段的模糊檢索;2)多個字段的模糊檢索。本文以醫(yī)學(xué)視聽教材為例,實現(xiàn)對視聽教材的多字段模糊檢索,提高教材的檢索效率。
2 PowerBuilder及其數(shù)據(jù)過濾功能
PowerBuilder(下面簡稱“PB”)采用面向?qū)ο缶幊碳夹g(shù)和可視化技術(shù),程序設(shè)計人員可以直觀地進(jìn)行程序設(shè)計。PB提供了眾多的畫板,如應(yīng)用程序畫板、數(shù)據(jù)庫畫板、數(shù)據(jù)窗口畫板等,設(shè)計人員通過這些畫板進(jìn)行程序設(shè)計。
數(shù)據(jù)窗口(Data Window)是PB獨有的一大特色。通過數(shù)據(jù)窗口,設(shè)計人員可以便捷地訪問后臺數(shù)據(jù)庫獲取數(shù)據(jù),并通過不同的顯示風(fēng)格將數(shù)據(jù)在應(yīng)用程序窗口中顯示出來。使用數(shù)據(jù)窗口需要先新建某種風(fēng)格的數(shù)據(jù)窗口對象,如Grid風(fēng)格數(shù)據(jù)窗口對象,再為數(shù)據(jù)窗口對象選擇數(shù)據(jù)源[2-5]。
PB數(shù)據(jù)過濾的基本方法 PB可以對數(shù)據(jù)窗口或數(shù)據(jù)存儲過程設(shè)置數(shù)據(jù)過濾規(guī)則。其過濾的實現(xiàn)分為兩步:第一步設(shè)置過濾規(guī)則;第二步進(jìn)行數(shù)據(jù)過濾。以數(shù)據(jù)窗口過濾為例,其實現(xiàn)過程為:
Integer dw_control.setfilter (string format)
integer dw_control.filter()
其中“dw_control”為數(shù)據(jù)窗口,“string format”為過濾規(guī)則。過濾規(guī)則為一條字符串,如“student_name=李四”;也可以是一個變量,但這個變量的值必須為一個字符串。以下兩種過濾方式等價。
方式一:
dw_1.setfilter( "student_name=李四")
dw_1.filter()
方式二:
string s_name
s_name="student_name=李四"
dw_1.setfilter(s_name)
dw_2.filter()
多重變量過濾規(guī)則 在實際應(yīng)用中,一個字段的值是在其值域范圍內(nèi)變化的,如學(xué)生的姓名可能是“張三”,也可能是“李四”,用戶在進(jìn)行檢索時根據(jù)自己的需要輸入檢索姓名。這反應(yīng)在程序開發(fā)中是對一個變量進(jìn)行檢索。在PB中,在字符串中引用變量需要在變量前、后添加“+”號,例如:
string s_name,s_name_filter
s_name=sle_1.text
s_name_filter="student_name='"+ s_name +" '"
dw_1.setfilter(s_name_filter)
dw_1.filter()
上例中用戶在“sle_1”文本框中輸入需要查詢的學(xué)生姓名,保存在字符串變量“s_name”中。PB對在字符串中引用變量的格式有嚴(yán)格要求,其順序為:單引號,雙引號,“+”號,空格,變量名,空格,“+”號,雙引號,空格,單引號。如果出現(xiàn)錯誤,過濾規(guī)則將設(shè)置失敗。
模糊檢索 如前文所述,用戶在進(jìn)行檢索時并不一定準(zhǔn)確知道學(xué)生的姓名,可能僅知道其姓名中的一部分,所以在程序開發(fā)過程中實現(xiàn)對字段的模糊檢索是信息管理系統(tǒng)一個主要功能,能夠極大地提高系統(tǒng)的實用性和用戶體驗。PB中可以使用“%”符號來代替不確定的字符,通過“l(fā)ike”關(guān)系操作符來匹配用戶指定的不完整的檢索參數(shù),例如:
string s_name,s_name_filter
s_name=sle_1.text
s_name_filter="student_name like '%"+s_name+"%'"
dw_1.setfilter(s_name_filter)
dw_1.filter()
3 視音頻素材的關(guān)系模式
在關(guān)系數(shù)據(jù)庫中對素材的檢索是基于素材的屬性實現(xiàn)的,在進(jìn)行數(shù)據(jù)庫設(shè)計時,對于素材屬性的抽象應(yīng)該緊密結(jié)合實際使用需求,不是越多越好、越細(xì)越好。在醫(yī)學(xué)視音頻素材實際使用中,師生更習(xí)慣于按照素材的學(xué)科分類、素材名稱、素材上傳者、教材出版社、素材內(nèi)容(基于文字描述)等關(guān)鍵詞對教材進(jìn)行檢索。視音頻素材的實體—聯(lián)系(E-R)模型如圖1所示。
在視音頻素材關(guān)系中,素材編號為主鍵,唯一標(biāo)識關(guān)系中的一個記錄,“素材類型”的值域為“D={學(xué)校資料,教學(xué)資料,學(xué)術(shù)報告,文娛晚會}”?!八夭脑合怠钡闹涤驗閷W(xué)校內(nèi)設(shè)有的行政機(jī)構(gòu)、教學(xué)院系,“素材科室”為學(xué)校各行政機(jī)構(gòu)、教學(xué)院系下對應(yīng)的科室、專業(yè)。之所以按照學(xué)校專業(yè)設(shè)置對素材進(jìn)行分類,而不嚴(yán)格按照醫(yī)學(xué)學(xué)科分類,一是為了符合學(xué)校實際,避免大而全的分類方式;二是為了兼顧學(xué)術(shù)講座、院系學(xué)術(shù)會議等其他類別視音頻資料的保存?!八夭膬?nèi)容”是對視音頻素材內(nèi)容的文字描述。
4 多字段模糊檢索的實現(xiàn)
為提高用戶對系統(tǒng)的使用體驗,用戶可以對素材的“素材名稱”“出版社”“素材上傳者”“素材審核者”“素材類別”“素材院系”“素材科室”“素材上傳日期”“素材內(nèi)容”等條件進(jìn)行單獨檢索,也可以對以上條件進(jìn)行組合檢索。檢索界面設(shè)計如圖2所示。
檢索界面左側(cè)為檢索條件輸入?!八夭拿Q”“出版社”“素材上傳者”“素材審核者”“素材內(nèi)容”為文本輸入,“素材類別”“素材院系”“素材科室”“素材上傳日期”為下拉列表,用戶在列表中選擇查詢條件。為“查詢”按鈕編輯查詢程序,當(dāng)用戶點擊查詢時,按用戶指定的查詢條件對素材進(jìn)行查詢。
//定義查詢變量
sc_mc=sle_1.text
sc_cbs=sle_2.text
sc_scz=sle_3.text
sc_shz=sle_4.text
sc_lb=ddlb_1.text
sc_yx=ddlb_2.text
sc_ks=ddlb_3.text
sc_date_q=ddlb_4.text
sc_date_z=ddlb_5.text
sc_nr=sle_5.text
if isnull(sc_mc)=true then //如果用戶沒有指定“素材名稱”
chaxun_tiaojian_mc="sc_name like '%'"
else //如果用戶指定了“素材名稱”
chaxun_tiaojian_mc="sc_name like '%"+sc_mc+"%'"
end if
if isnull(sc_date_q)=true then //如果沒有設(shè)置查詢“起始日期”
sc_date_q=string(1980-01-01)
else //如果設(shè)置了查詢“起始日期”
sc_date_q=sc_date_q+"-01"+"-01"
end if
if isnull(sc_date_z)=true then //如果沒有設(shè)置查詢“終止日期”
sc_date_z=string(today())
else //如果設(shè)置了查詢“終止日期”
sc_date_z=sc_date_z+"-12"+"-31"
end if
chaxun_tiaojian_date="sc_date>=date('"+sc_date_q+"') and & t_sucai_shangchuan_sucai_date<=date('"+sc_date_z+"')"
//其他查詢條件設(shè)置
dw_1.setfilter("("+chaxun_tiaojian_mc+") and &
("+chaxun_tiaojian_czcbs+") and &
("+chaxun_tiaojian_scz+") and&
("+chaxun_tiaojian_shz+") and&
("+chaxun_tiaojian_lb+") and&
("+chaxun_tiaojian_yuanxi+") and &
("+chaxun_tiaojian_ks+") and &
("+chaxun_tiaojian_ms+") and("+chaxun_tiaojian_date+")")
dw_1.filter()
r_count=dw_1.retrieve()
for i=0 to r_count step 1
//在數(shù)據(jù)窗口中顯示檢索到的素材
next
如果需要在存儲過程中對數(shù)據(jù)進(jìn)行過濾,需要先定義一個存儲過程,然后對該存儲過程設(shè)置過濾規(guī)則。
datastore ds_sc_video
ds_sc_video=create datestore
ds_sc_video.dataobject="d_sc_video"
ds_sc_video.setfilter(查詢條件)
ds_sc_video.filter()
r_count=ds_sc_video.retrieve()
for i=0 to r_count step 1
//在數(shù)據(jù)窗口中顯示檢索到的素材
next
5 結(jié)束語
數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)應(yīng)注重系統(tǒng)的實用性,提高用戶使用體驗。本文所提出的多字段模糊檢索功能通過多重變量的使用實現(xiàn)了對多個字段的模糊檢索,這在程序設(shè)計中有助于程序的模塊化設(shè)計,在實際使用中也提高了素材的檢出率,得到用戶的好評。
參考文獻(xiàn)
[1]教育信息化“十三五”規(guī)劃[DB/OL].[2016-06-07].http://www.moe.edu.cn/srcsite/A16/s3342/201606/t2016
0622_269367.html.
[2]郭新順.基于PowerBuilder數(shù)據(jù)窗口的查詢方法研究[J].計算機(jī)應(yīng)用與軟件,2006,23(5):76-77,110.
[3]華銓平.PowerBuilder程序設(shè)計[M].北京:清華大學(xué)出版社,2004.
[4]劉大本.PowerBuilder程序設(shè)計教程[M].北京:中國水利水電出版社,2004.
[5]王艷青.PowerBuilder程序設(shè)計基礎(chǔ)[M].北京:中國水利水電出版社,2006.