解建俠,徐樂,黨興華
(1.安徽建筑大學(xué)電信學(xué)院,安徽 合肥 230601;2.安徽省建筑科學(xué)研究設(shè)計(jì)院,安徽 合肥 230001)
隨著計(jì)算機(jī)技術(shù)和通信技術(shù)的不斷發(fā)展,辦公自動(dòng)化已成為大勢所趨。通過調(diào)研,筆者發(fā)現(xiàn)多數(shù)混凝土企業(yè)的信息化程度偏低,勞動(dòng)強(qiáng)度大,生產(chǎn)效率低,試驗(yàn)人員迫切要求建立一個(gè)輕松、有效、準(zhǔn)確的試驗(yàn)管理系統(tǒng)。針對上述需求,筆者用Visual Basic 6.0、SQL Server 2000和Crystal Reports 9編制了一套混凝土試驗(yàn)室試驗(yàn)管理軟件系統(tǒng),使用該系統(tǒng)能夠提高工作效率,降低出錯(cuò)率,提高數(shù)據(jù)安全。
根據(jù)不同的用戶權(quán)限賦予用戶不同的業(yè)務(wù)操作權(quán)限,成功登陸后,只有管理員才能使用相關(guān)的管理類菜單。
能夠?qū)崿F(xiàn)試驗(yàn)委托、試驗(yàn)記錄和試驗(yàn)報(bào)告過程,以上三個(gè)過程中,對于不符合要求的表單填寫,程序在保存時(shí)會進(jìn)行識別,提示用戶做相應(yīng)的修改,把有效的信息存入數(shù)據(jù)庫。
對于寫入數(shù)據(jù)庫的試驗(yàn)委托、記錄或者報(bào)告,支持用戶以編號、日期、類別、委托單位、工程名稱等關(guān)鍵字或各個(gè)關(guān)鍵字的組合進(jìn)行模糊批量查詢,查詢結(jié)果可實(shí)現(xiàn)預(yù)覽、批量打印輸出。
該模塊只有管理員有權(quán)限使用,主要包括本地?cái)?shù)據(jù)庫的備份(導(dǎo)出)、還原(導(dǎo)入)、數(shù)據(jù)庫的上傳部分。
該模塊只有管理員有權(quán)限使用,主要包括密碼修改、用戶管理、試驗(yàn)室名稱、試驗(yàn)編號方式、工程管理、價(jià)格管理、設(shè)備管理等部分。軟件的功能與結(jié)構(gòu)見圖1。
圖1 軟件用例圖
圖2
①使用Power Designer創(chuàng)建數(shù)據(jù)庫。作為數(shù)據(jù)庫建模工具,它能夠迅速高效地建立數(shù)據(jù)庫、表、視圖等,還能把數(shù)據(jù)庫的生成過程導(dǎo)出為SQL腳本語言,便于快速移植。
②數(shù)據(jù)庫中查詢使用視圖技術(shù)。項(xiàng)目中,所有委托單、記錄單、報(bào)告單和配置參數(shù)的查詢都是通過調(diào)用視圖實(shí)現(xiàn)的。由于其預(yù)編譯性,因此能夠獲得很高的執(zhí)行效率,相較于傳統(tǒng)的直接傳遞SQL查詢語句,降低了網(wǎng)絡(luò)數(shù)據(jù)的傳輸量;還能夠簡化查詢語句的書寫,增加數(shù)據(jù)庫的安全性。
③表中記錄的增、刪、改等固定操作使用存儲過程技術(shù)。存儲過程是一系列已經(jīng)預(yù)編繹過的SQL語句,因此運(yùn)行速度很快,而且運(yùn)行比較穩(wěn)定;同時(shí),調(diào)用時(shí)只需傳遞很簡單的命令和參數(shù)即可,減少了網(wǎng)絡(luò)流量;執(zhí)行結(jié)束后,可以返回單個(gè)或多個(gè)結(jié)果集以及返回值,這樣,運(yùn)算放在服務(wù)器端進(jìn)行,減少了客戶機(jī)的壓力。項(xiàng)目中,在設(shè)計(jì)對數(shù)據(jù)庫表單修改、保存等操作時(shí)大量使用了該技術(shù)。
①使用ADO對象類型訪問數(shù)據(jù)庫。ADO對DAO進(jìn)行了擴(kuò)展,具有更多的屬性、方法和事件;同時(shí),在VB中不能直接訪問OLEDB,但ADO封裝實(shí)際上可以實(shí)現(xiàn)OLEDB的所有功能;ADO比ODBC具有更高的效率、更好的可擴(kuò)展性和靈活性。因此,本項(xiàng)目主要采取的是ADO方法,使用ADO對象模型訪問數(shù)據(jù)庫。另外,少數(shù)只查找不涉及編輯的表單,直接使用ADOData控件訪問數(shù)據(jù)庫,更加簡單快捷。
②使用標(biāo)準(zhǔn)模塊(BAS)。對項(xiàng)目中需要頻繁使用的,如:連接數(shù)據(jù)庫、斷開與數(shù)據(jù)庫的連接、執(zhí)行數(shù)據(jù)庫操作語句、執(zhí)行數(shù)據(jù)庫查詢語句、加載下拉列表框內(nèi)容、清空表單、加載表單按鈕狀態(tài)等操作,將其制作成公用過程(Public Sub)或者公用函數(shù)(Public Function),統(tǒng)一放入標(biāo)準(zhǔn)模塊中,實(shí)現(xiàn)代碼復(fù)用,增強(qiáng)了程序的條理性。
③使用類模塊(CLS)。筆者創(chuàng)建了“用戶”這個(gè)類,賦予它“用戶名”、“密碼”、“用戶類型”三個(gè)基本屬性,以及“清空屬性”、“刪除用戶”、“增加用戶”、“修改密碼”、“查詢用戶信息”、“查詢用戶是否存在”、“修改用戶信息”、“獲取用戶權(quán)限”等十幾種方法。其中很多種方法都包含著操作數(shù)據(jù)庫的復(fù)雜語句,這樣封裝復(fù)雜代碼,方便了復(fù)用,實(shí)現(xiàn)了面向?qū)ο蠛统绦虻慕Y(jié)構(gòu)化,便于后期維護(hù)或代碼移植。
④給窗體設(shè)置自定義屬性來在窗體間傳遞參數(shù)。窗體間傳遞參數(shù)的方法有:使用全局變量傳遞參數(shù)、使用窗體標(biāo)準(zhǔn)屬性傳遞參數(shù)、使用給窗體設(shè)置自定義屬性傳遞參數(shù)。第一種作用域是全局出現(xiàn)錯(cuò)誤將難以發(fā)現(xiàn),同時(shí)增加了窗體間的耦合。第二種缺點(diǎn)是不便表達(dá)參數(shù)的意義。本項(xiàng)目采用第三種,即在窗體的聲明部分用Public定義變量來作為窗體的自定義屬性,在其他模塊中就可以設(shè)置這些自定義屬性的值。這樣,既準(zhǔn)確地傳遞了參數(shù),又設(shè)置了有意義的名稱。
⑤通過狀態(tài)函數(shù)給表單上的按鈕加載狀態(tài)值(有效或無效)。筆者的方法是:先窮舉表單上按鈕所有符合業(yè)務(wù)邏輯的狀態(tài)組合,建立“窗體狀態(tài)參數(shù)-所有按鈕狀態(tài)”的二維表格,然后在bas模塊文件中建立“窗體名稱”-“窗體狀態(tài)標(biāo)示碼”為二元參數(shù)的全局型的過程(Public Sub),調(diào)用時(shí)用“窗體狀態(tài)標(biāo)示碼”值“查”表,讀取相應(yīng)的窗體按鈕狀態(tài)并加載。這樣,簡化了按鈕間復(fù)雜的邏輯關(guān)系編程,增強(qiáng)了程序的結(jié)構(gòu)感。
報(bào)表是應(yīng)用程序中不可缺少的部分,試驗(yàn)室的報(bào)表主要體現(xiàn)在需要紙質(zhì)打印的各類單據(jù),材料試驗(yàn)項(xiàng)目繁多、表格復(fù)雜。VB6作為較老的語言,自身的報(bào)表功能是其公認(rèn)弱項(xiàng)。水晶報(bào)表(Crystal Report)是業(yè)內(nèi)專業(yè)、強(qiáng)大的報(bào)表系統(tǒng),本項(xiàng)目嘗試把水晶報(bào)表和VB6結(jié)合起來作為其報(bào)告輸出工具,提出了一個(gè)解決方法。
考慮到實(shí)際業(yè)務(wù)中單據(jù)樣式變化不大,因此采用推模式(PULL),把水晶報(bào)表rpt文件當(dāng)成模板,在設(shè)計(jì)器里設(shè)計(jì)好報(bào)表格式,再組裝DataSet就可以生成報(bào)表了。Crystal Report9和VB6連接時(shí)報(bào)表預(yù)覽窗體的關(guān)鍵代碼簡述如下:
Dim SandReportReport As New CR_SandReport'SandOrder是建立的報(bào)表的名稱
DimSandReport_Connection As ADODB.Connection'建立一個(gè)ADO連接
DimSandReport_adoRSAsADODB.Recordset
PrivateSub Form_Load()
'創(chuàng)建并綁定ADORecordset對象
Set SandReport_Connection=New ADODB.Connection
Set SandReport_adoRS=New ADODB.Recordset
SandReport_Connection.Open Conn'打開連接,其中conn為系統(tǒng)連接字符串
SandReport_adoRS.Open strSQL,SandReport_Connection,adOpenDynamic,adLockBatchOptimistic
SandReportReport.Database.SetDataSourceSandReport_adoRS'動(dòng)態(tài)設(shè)置報(bào)表數(shù)據(jù)源
CR_SandOrder.PaperSize=crPaperA4'設(shè)置報(bào)表紙張大小為A4
Me.WindowState=2
Screen.MousePointer=vbHourglass
CRViewer91.ReportSource=SandReportReport
CRViewer91.ViewReport'顯示報(bào)表
Screen.MousePointer=vbDefault
End Sub
以混凝土砂試驗(yàn)委托、試驗(yàn)、報(bào)告、查找等主要功能為例,展示一下程序運(yùn)行效果,見圖2。
使用該軟件,能把混凝土企業(yè)試驗(yàn)室的眾多業(yè)務(wù)整合在一起,條理明晰;避免了試驗(yàn)人員繁瑣的計(jì)算、復(fù)驗(yàn)過程;報(bào)表美觀大方,同時(shí)支持預(yù)覽、批量打印。實(shí)踐證明,該軟件能夠給試驗(yàn)室提供有力的支持和幫助,對于類似的試驗(yàn)室建設(shè),也有著較好的借鑒意義。
[1]史斌星.Visual Basic貫通教程[M].北京:清華大學(xué)出版社,2003.
[2]黃增榮.Visual Basic 6.0計(jì)算方法開發(fā)方法指南[M].上海:復(fù)旦大學(xué)出版社,2000.
[3]汪黎明,等.安徽省建設(shè)工程檢測人員培訓(xùn)考核指南[M].鄭州:黃河水利出版社,2007.