夏 平 張 永
摘要 在一些進(jìn)行數(shù)據(jù)計(jì)算的應(yīng)用程序中,有時(shí)會(huì)生成有規(guī)律的數(shù)據(jù),報(bào)表會(huì)把數(shù)據(jù)按需要的形式輸出,但報(bào)表一般都是跟數(shù)據(jù)庫(kù)聯(lián)合在一起使用的,這樣會(huì)對(duì)用戶使用帶來不便。本文結(jié)合作者本身進(jìn)行程序開發(fā)的實(shí)踐經(jīng)驗(yàn),簡(jiǎn)要介紹了實(shí)現(xiàn)無數(shù)據(jù)庫(kù)報(bào)表打印的一般實(shí)現(xiàn)方法,重點(diǎn)對(duì)數(shù)組與記錄集的通信方法進(jìn)行了探討。
關(guān)鍵詞 無數(shù)據(jù)庫(kù);報(bào)表;實(shí)現(xiàn);VB6.0
中圖分類號(hào) TP392 文獻(xiàn)標(biāo)識(shí)碼 A 文章編號(hào) 1674-6708(2009)07-0011-02
0 引言
在不使用數(shù)據(jù)庫(kù)技術(shù)的應(yīng)用程序中,對(duì)計(jì)算得到的數(shù)據(jù),如果符合表格特征,也可以像使用數(shù)據(jù)庫(kù)技術(shù)一樣,利用報(bào)表輸出令用戶滿意的結(jié)果文件。
解決以上問題的核心是記錄集對(duì)象。一般來說,記錄集是負(fù)責(zé)在數(shù)據(jù)庫(kù)和應(yīng)用程序(也包含報(bào)表)之間通信的一個(gè)重要媒介。如果我們能將有規(guī)律的表格數(shù)據(jù)提供給記錄集,那就可以實(shí)現(xiàn)使用報(bào)表的目標(biāo)了,對(duì)于報(bào)表來說,它并不會(huì)關(guān)心數(shù)據(jù)的來源是否是數(shù)據(jù)庫(kù)。在實(shí)際的程序設(shè)計(jì)中,二維數(shù)組或結(jié)構(gòu)體數(shù)組等都是符合條件的有規(guī)律的表格數(shù)據(jù)。
本文結(jié)合實(shí)際,簡(jiǎn)要介紹了在VB6.0開發(fā)環(huán)境中如何實(shí)現(xiàn)無數(shù)據(jù)庫(kù)報(bào)表打印功能。
1 技術(shù)實(shí)現(xiàn)過程
在某個(gè)應(yīng)用系統(tǒng)開發(fā)過程中,需要將結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)使用報(bào)表輸出。大體的解決步驟是:先計(jì)算出數(shù)組中的數(shù)據(jù),然后按數(shù)組的結(jié)構(gòu)構(gòu)造出空的記錄集結(jié)構(gòu),將數(shù)組中的數(shù)據(jù)追加到記錄集中,最后利用VB6.0自帶的報(bào)表輸出。完整的實(shí)現(xiàn)過程使用代碼描述如下:
1.1 記錄集定義及數(shù)組初始化
'定義初始記錄集,可以放在公共模塊中定義
Public rsobj As New Recordset
'定義結(jié)構(gòu)體,可以放在公共模塊中定義,為簡(jiǎn)單起見本結(jié)構(gòu)體僅含有5個(gè)元素
Public Type typUser
Toothid As Integer
Caliber As Double
SideAngle As Double
THeight As Double
ApAngle As Double
End Type
'定義動(dòng)態(tài)數(shù)組,用來保存計(jì)算的結(jié)果數(shù)據(jù),可以放在公共模塊中
Public CatNum() As typUser
'在使用的時(shí)候使數(shù)組長(zhǎng)度初始化,“ToothNum”為一預(yù)先計(jì)算值,加20是為了保證數(shù)組有足夠的容量
ReDim CatNum(ToothNum + 20)
'數(shù)組0行數(shù)據(jù)初始化,此處數(shù)組的數(shù)據(jù)計(jì)算是依據(jù)某種算法,讀者不必關(guān)注
CatNum(0).Toothid = 0
CatNum(0).Caliber = ToothDis / 2
CatNum(0).ApAngle = Atn((ToothDis / 2) / Focal)
CatNum(0).SideAngle = (Atn((Sin(CatNum(0).ApAngle)) / (n1 - Cos(CatNum(0).ApAngle))))
CatNum(0).THeight = Tan(CatNum(0).SideAngle) * ToothDis
'使用循環(huán)結(jié)構(gòu)計(jì)算余下的數(shù)據(jù)行
For i = 1 To ToothNum - 1
CatNum(i).Toothid = (CatNum(i - 1).Toothid + 1)
CatNum(i).Caliber = ((ToothDis / 2) + (i * ToothDis))
CatNum(i).ApAngle = (Atn(CatNum(i).Caliber / Focal))
CatNum(i).SideAngle = (Atn((Sin(CatNum(i).ApAngle)) / (n1 - Cos(CatNum(i).ApAngle))))
CatNum(i).THeight = (Tan(CatNum(i).SideAngle) * ToothDis)
Next i
1.2 構(gòu)造記錄集并導(dǎo)入數(shù)據(jù)
' rptMemberInfo為報(bào)表控件名,本行代碼為設(shè)置報(bào)表標(biāo)頭中某個(gè)標(biāo)簽項(xiàng)的輸出信息,其余以此類推
rptMemberInfo.Sections("Section4").Controls("Label11").Caption = " " + ProdName
'從初始記錄集按結(jié)構(gòu)體數(shù)組格式構(gòu)造出對(duì)應(yīng)的記錄集格式
rsobj.Fields.Append " Toothid ", adVarChar, 6'為記錄集增加字段、指定數(shù)據(jù)類型和長(zhǎng)度
rsobj.Fields.Append " Caliber ", adVarChar, 8
rsobj.Fields.Append " ApAngle ", adVarChar, 8
rsobj.Fields.Append " SideAngle ", adVarChar, 8
rsobj.Fields.Append " THeight ", adVarChar, 8
rsobj.Open
'利用循環(huán)將數(shù)組中的數(shù)據(jù)追加到記錄集中
For i = 0 To ToothNum - 1'計(jì)算循環(huán)次數(shù)
rsobj.AddNew'增加空白新記錄,然后從數(shù)組中導(dǎo)入數(shù)據(jù)
rsobj.Fields("Toothid ").Value = CatNum(i).Toothid
rsobj.Fields("Caliber ").Value = Format(CatNum(i).Caliber, "0.0000")
rsobj.Fields("SideAngle ").Value = Format((CatNum(i).SideAngle * 180) / Pi, "0.0000")
rsobj.Fields("THeight ").Value = Format(CatNum(i).THeight, "0.0000")
rsobj.Fields("ApAngle ").Value = Format((CatNum(i).ApAngle * 180) / Pi, "0.0000")
rsobj.MoveNext'移動(dòng)指針至下一位置
Next i
1.3 實(shí)現(xiàn)數(shù)據(jù)報(bào)表輸出
'將記錄集作為報(bào)表的數(shù)據(jù)源,實(shí)現(xiàn)報(bào)表輸出“rptMemberInfo”為報(bào)表控件名
Set rptMemberInfo.DataSource = rsobj.DataSource
With rptMemberInfo.Sections("Section1").Controls
For i = 1 To rptMemberInfo.Sections("Section1").Controls.Count
If TypeOf .Item(i) Is RptTextBox Then
.Item(i).DataMember = ""
.Item(i).DataField = rsobj.Fields(i - 1).Name
End If
Next i
End With
2 總結(jié)
有些時(shí)候,應(yīng)用系統(tǒng)僅僅是計(jì)算數(shù)據(jù),并不需要用到數(shù)據(jù)庫(kù)。如果想使用報(bào)表來靈活輸出數(shù)據(jù),以上所介紹的技術(shù)將是一個(gè)不錯(cuò)的選擇。當(dāng)然,這種技術(shù)方法僅僅適用于類似VB6.0這樣的傳統(tǒng)開發(fā)工具,在某些可以將二維表格直接與報(bào)表關(guān)聯(lián)的新型系統(tǒng)開發(fā)工具中,就不必這么麻煩的轉(zhuǎn)換了。
參考文獻(xiàn)
[1]蔡敏.Visual Basic數(shù)據(jù)庫(kù)開發(fā)工程案例.人民郵電出版社,2007.
[2]李春葆.Visual Basic程序設(shè)計(jì)教程.中國(guó)人民大學(xué)出版社,2008.
[3]Microsoft Corporation.Visual Basic 6.0 Programmer's Guide.北京希望電子出版社,1999.
[4]劉穎,常曉波譯.Visual Basic 6.0高級(jí)編程.清華大學(xué)出版社,2003.
重慶大渡口區(qū)科技獎(jiǎng)勵(lì)大會(huì)52萬重獎(jiǎng)科技工作者
近日,重慶市大渡口區(qū)政府召開的科技獎(jiǎng)勵(lì)大會(huì),用52萬元重獎(jiǎng)科技工作者。
在獎(jiǎng)勵(lì)大會(huì)上,該區(qū)政府表彰了1名科技功臣、3名突出貢獻(xiàn)科技工作者及12個(gè)科技項(xiàng)目,分別給予了2~6萬元不等的獎(jiǎng)勵(lì),獎(jiǎng)勵(lì)金額共計(jì)52萬元。某街道工作人員在工作中創(chuàng)新,發(fā)明軟件為殘疾人提供個(gè)性化服務(wù),獲得了政府2萬元獎(jiǎng)勵(lì)。此外,該區(qū)還成立了由重慶郵電大學(xué)副校長(zhǎng)、教授李銀國(guó)等13位專家組成的科技顧問團(tuán)。據(jù)了解,顧問團(tuán)成員今后將對(duì)企業(yè)進(jìn)行技術(shù)診斷,對(duì)企業(yè)科技發(fā)展提出建設(shè)性意見,并參與企業(yè)申報(bào)的科技項(xiàng)目進(jìn)行評(píng)審等。
科技獎(jiǎng)勵(lì)大會(huì)在全區(qū)科技工作者引起強(qiáng)烈反,許多科技工作者和科技顧問團(tuán)成員紛紛表示,大渡口區(qū)科技獎(jiǎng)勵(lì)大會(huì)是在全區(qū)上下貫徹落實(shí)十七屆四中全會(huì)精神、全力以赴攻堅(jiān)“止滑促增”之際召開,此舉必將激勵(lì)更多的人投身于提高科技自主創(chuàng)新能力、建設(shè)創(chuàng)新型國(guó)家中來,必將為增強(qiáng)我區(qū)自主創(chuàng)新能力、增強(qiáng)戰(zhàn)勝各種困難的信心和決心起到積極的推動(dòng)作用。
科技顧問團(tuán)副團(tuán)長(zhǎng)、重鋼集團(tuán)公司總經(jīng)理劉加才表示:大渡口區(qū)此次重金獎(jiǎng)勵(lì)科技項(xiàng)目和科技人員,激勵(lì)作用非常大,充分顯示了區(qū)委、區(qū)政府對(duì)科技工作和科技工作者的一貫重視和關(guān)心。同時(shí),他還從政府科技顧問的角度積極建言獻(xiàn)策,提出“四點(diǎn)建議和希望”:一是希望大渡口區(qū)進(jìn)一步創(chuàng)造條件,加強(qiáng)高科技人才引進(jìn)工作;二是希望進(jìn)一步發(fā)揮政府的引導(dǎo)和主導(dǎo)作用,加強(qiáng)產(chǎn)、學(xué)、研結(jié)合;三是希望進(jìn)一步加強(qiáng)科技投入,特別要加大新型科研項(xiàng)目的投入;四是希望加強(qiáng)與市科委等市級(jí)部門的協(xié)調(diào),整合各方資源,建立研發(fā)、成果轉(zhuǎn)化平臺(tái)建設(shè),降低研發(fā)成本,促進(jìn)企業(yè)發(fā)展。
“科技功臣”獲得者——長(zhǎng)征重工鄭興東在發(fā)言中講到:非常感謝大渡口區(qū)委、政府給予的這個(gè)最高榮譽(yù),他認(rèn)為這個(gè)榮譽(yù)不僅是獎(jiǎng)勵(lì)給他個(gè)人的,更是獎(jiǎng)勵(lì)戰(zhàn)斗在科技創(chuàng)新工作崗位上的所有同仁的。他說:沒有科技創(chuàng)新,就沒有長(zhǎng)征重工的今天,就沒有大渡口的迅猛發(fā)展的今天。
“突出貢獻(xiàn)科技工作者”獲得者——湯捷說:作為一名私營(yíng)企業(yè)的科技工作者,被評(píng)選為突出貢獻(xiàn)科技工作者感到無上榮光!隨著社會(huì)的不斷進(jìn)步和發(fā)展,競(jìng)爭(zhēng)會(huì)越來越激烈,企業(yè)發(fā)展如逆水行舟,不進(jìn)則退,企業(yè)只有重視科技創(chuàng)新和技術(shù)進(jìn)步,才能不斷地發(fā)展和壯大。
重慶理工大學(xué)副校長(zhǎng)、區(qū)科技顧問石曉輝會(huì)后說:大渡口如此隆重獎(jiǎng)勵(lì)科技工作者,對(duì)營(yíng)造全社會(huì)尊重知識(shí)、尊重人才氛圍非常有益,他深受啟發(fā),并建議大渡口區(qū)下一步要做好“產(chǎn)業(yè)”規(guī)劃,發(fā)展占地面積小,產(chǎn)值高,稅收多的高新技術(shù)企業(yè);做好引智工作:做好產(chǎn)學(xué)研結(jié)合,設(shè)立專項(xiàng),支持企業(yè)與科研院所合作的項(xiàng)目,將資金給科研院所,科研院所為企業(yè)做好智力支持。設(shè)立科技獎(jiǎng):對(duì)從事科學(xué)研究、成果轉(zhuǎn)化進(jìn)行專項(xiàng)獎(jiǎng)勵(lì)。
科技興國(guó),全民關(guān)注,一些普通群眾會(huì)后也紛紛表示促動(dòng)很大,原來以為科技創(chuàng)新離自己很遠(yuǎn),是科學(xué)家的事,這次從科技獎(jiǎng)勵(lì)大會(huì)中看到了政府獎(jiǎng)勵(lì)的科技項(xiàng)目中還有與民生密切相關(guān)的項(xiàng)目,使他們深深感受到了:科技創(chuàng)新近在身邊,處處留心都是學(xué)問。