第一篇:基于VB實(shí)現(xiàn)復(fù)雜報(bào)表設(shè)計(jì)
陜西理工學(xué)院畢業(yè)設(shè)計(jì)
基于VB實(shí)現(xiàn)復(fù)雜報(bào)表設(shè)計(jì)
(陜西理工學(xué)院 物理系 電子信息科學(xué)與技術(shù)07級(jí)2班,陜西 漢中 723000)
[摘要] 本文介紹了報(bào)表設(shè)計(jì)的幾種方法和以往報(bào)表設(shè)計(jì)所存在的問(wèn)題,并以實(shí)例介紹自動(dòng)生成復(fù)雜報(bào)表的方法。實(shí)例基于VB軟件開(kāi)發(fā),并以word為模板,通過(guò)調(diào)用access數(shù)據(jù)庫(kù)數(shù)據(jù)自動(dòng)生成復(fù)雜報(bào)表。
[關(guān)鍵詞]VB;數(shù)據(jù)庫(kù);Word;復(fù)雜報(bào)表
The Design Of Complex Reports Based VB
(Grade 2007,Class2, Major electronical information and technology,Physics Dept, Shaanxi University of Technology,Hanzhong 723000,Shaanxi)
[Abstract] This paper reports detailed description of several common methods, previous reports of the existence of the problem, and makes use of example to achieve a complex reporting by using of software.The example based on VB software and used word template, to achieve the common complex reporting software through reallocating database.[Key words] VB;Database;Word;Complex Statements
陜西理工學(xué)院畢業(yè)設(shè)計(jì)
1引言
報(bào)表是人們?cè)谌粘I钪袑?duì)某類相關(guān)信息進(jìn)行集中處理的重要手段,是企業(yè)信息化不可缺少的部分。報(bào)表在各行各業(yè)中應(yīng)用廣泛,是信息瀏覽、分析和打印的有力工具。傳統(tǒng)報(bào)表系統(tǒng)均以國(guó)外簡(jiǎn)單報(bào)表模型為基礎(chǔ)設(shè)計(jì),不能適應(yīng)復(fù)雜報(bào)表的開(kāi)發(fā)。特別是在處理復(fù)雜數(shù)據(jù)源報(bào)表時(shí),常常需要編寫代碼準(zhǔn)備數(shù)據(jù)或進(jìn)行子報(bào)表拼接才能實(shí)現(xiàn)。1.1傳統(tǒng)報(bào)表系統(tǒng)存在的問(wèn)題
目前,國(guó)內(nèi)外的報(bào)表系統(tǒng)種類繁多,功能界面各具特色,對(duì)這些報(bào)表系統(tǒng)的比較研究,有助于我們?cè)O(shè)計(jì)出更好的報(bào)表系統(tǒng)。國(guó)外的報(bào)表系統(tǒng)的技術(shù)都比較成熟,適合制作樣式簡(jiǎn)單的報(bào)表,但一般都為高端產(chǎn)品,價(jià)格不菲,并且在處理具有強(qiáng)烈中國(guó)特色的報(bào)表時(shí),國(guó)外產(chǎn)品不僅報(bào)表處理能力相當(dāng)不適應(yīng),甚至某些技術(shù)也略顯落后,例如部分產(chǎn)品不能穩(wěn)定地在UNIX上部署,只能支持IE瀏覽器,統(tǒng)計(jì)圖輸出仍采用原始的CGl方式等。國(guó)內(nèi)的傳統(tǒng)報(bào)表系統(tǒng)更適合制作復(fù)雜的中國(guó)式報(bào)表,在報(bào)表設(shè)計(jì)和價(jià)格等方面國(guó)內(nèi)報(bào)表系統(tǒng)也具有一些優(yōu)勢(shì),但國(guó)內(nèi)的報(bào)表系統(tǒng)在服務(wù)質(zhì)量和產(chǎn)品本身的品質(zhì)等方面還存在著一些不足和缺陷,有待進(jìn)一步的改進(jìn)和完善。無(wú)論是國(guó)外的高端報(bào)表系統(tǒng),還是國(guó)內(nèi)的傳統(tǒng)報(bào)表系統(tǒng),每一種報(bào)表系統(tǒng)都有各自的優(yōu)點(diǎn)和缺點(diǎn),都有各自擅長(zhǎng)的領(lǐng)域,在實(shí)際工作中應(yīng)該根據(jù)需要選擇合適的報(bào)表系統(tǒng)。面對(duì)日益復(fù)雜的報(bào)表開(kāi)發(fā)需求,尤其是復(fù)雜的中國(guó)式報(bào)表,這些報(bào)表系統(tǒng)或多或少都有些力不從心,其主要問(wèn)題表現(xiàn)在以下三個(gè)方面:
(1)復(fù)雜數(shù)據(jù)源的處理能力不足。報(bào)表需要從復(fù)雜的數(shù)據(jù)源或者多個(gè)不同類型的數(shù)據(jù)源中獲得數(shù)據(jù),獲得的數(shù)據(jù)還可能需要統(tǒng)計(jì),格式轉(zhuǎn)換或其他處理,這些需求都是傳統(tǒng)報(bào)表系統(tǒng)難于實(shí)現(xiàn)的。
(2)報(bào)表的可維護(hù)性差。傳統(tǒng)的報(bào)表系統(tǒng)生成報(bào)表的種類固定,使用方便,但很多軟件系統(tǒng)無(wú)論在實(shí)施還是在維護(hù)階段,報(bào)表都會(huì)進(jìn)行頻繁的新增和修改,而傳統(tǒng)的報(bào)表系統(tǒng)缺乏無(wú)編碼定制能力,系統(tǒng)擴(kuò)展網(wǎng)難。一旦用戶對(duì)報(bào)表樣式的需求發(fā)生改變,就會(huì)給軟件維護(hù)帶來(lái)許多不必要的麻煩。
(3)報(bào)表保存格式的通用性較差。報(bào)表保存格式不統(tǒng)一,保存格式理解困難,各種報(bào)表工具各自為政,報(bào)表模板無(wú)法兼容,行業(yè)也沒(méi)有形成統(tǒng)一的標(biāo)準(zhǔn),一旦用戶選定了某一報(bào)表工具就意味著要一直使用。如果不幸選擇失誤,已經(jīng)做的工作都要重新再來(lái)。
總之,利用傳統(tǒng)的報(bào)表系統(tǒng)制作報(bào)表維護(hù)量相當(dāng)大,一個(gè)需求對(duì)應(yīng)一個(gè)報(bào)表文件,不同
陜西理工學(xué)院畢業(yè)設(shè)計(jì) 的組合要求制作大量的報(bào)表文件,使得開(kāi)發(fā)過(guò)程變得極為繁瑣,難以實(shí)現(xiàn)用戶的需求。在設(shè)計(jì)復(fù)雜數(shù)據(jù)源的報(bào)表時(shí),或者需要人工轉(zhuǎn)換數(shù)據(jù)格式,或者要編寫大量代碼將多個(gè)數(shù)據(jù)源運(yùn)算成為一個(gè)數(shù)據(jù)源再使用,或者使用拼接子報(bào)表的方式來(lái)實(shí)現(xiàn),但都沒(méi)有從根本上解決問(wèn)題,嚴(yán)重影響報(bào)表的設(shè)計(jì)和使用效率。因此如何快速制作符合多層結(jié)構(gòu)特點(diǎn)的復(fù)雜數(shù)據(jù)源報(bào)表,減輕開(kāi)發(fā)工作量,已經(jīng)成為報(bào)表系統(tǒng)開(kāi)發(fā)的重要問(wèn)題。
在計(jì)算機(jī)出現(xiàn)之前,數(shù)據(jù)需要以紙制文件等形式保存,數(shù)據(jù)處理是手工進(jìn)行的,報(bào)表的編制也是手工實(shí)現(xiàn)的。隨著計(jì)算機(jī)的廣泛應(yīng)用,人們開(kāi)始使用計(jì)算機(jī)及計(jì)算機(jī)軟件實(shí)現(xiàn)數(shù)據(jù)處理,使用數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)管理數(shù)據(jù),使用應(yīng)用程序來(lái)完成具體的業(yè)務(wù)操作,報(bào)表的編制也開(kāi)始使用軟件來(lái)實(shí)現(xiàn)。完成報(bào)表編制工作的軟件程序稱為報(bào)表系統(tǒng)或者報(bào)表工具。報(bào)表系統(tǒng)的產(chǎn)生改變了報(bào)表編制的流程、方法以及編制手段。
報(bào)表是信息管理系統(tǒng)中各種數(shù)據(jù)信息的最終輸出結(jié)果,是其重要的組成部分。在信息管理系統(tǒng)的開(kāi)發(fā)過(guò)程中,軟件設(shè)計(jì)人員常常需要設(shè)計(jì)大量的報(bào)表,其中相當(dāng)一部分報(bào)表的結(jié)構(gòu)比較類似,需要軟件設(shè)計(jì)人員逐一定義每一個(gè)報(bào)表的報(bào)表對(duì)象、數(shù)據(jù)模型、顯示格式等屬性,同時(shí)還可能對(duì)數(shù)據(jù)存儲(chǔ)、導(dǎo)入和導(dǎo)出等操作帶來(lái)諸多不便,這些繁瑣的重復(fù)性工作常?;ㄙM(fèi)軟件設(shè)計(jì)人員、操作人員、維護(hù)人員大量的精力和時(shí)間,影響系統(tǒng)的開(kāi)發(fā)、使用效率。同時(shí),報(bào)表還是信息管理系統(tǒng)中變化性很強(qiáng)的部分。應(yīng)用系統(tǒng)交付用戶后,隨著時(shí)間的推移,用戶可能需要新的報(bào)表,報(bào)表的格式、報(bào)表的數(shù)據(jù)要求都有可能發(fā)生變化,用戶的各種各樣的報(bào)表要求,僅依靠應(yīng)用系統(tǒng)預(yù)先提供的報(bào)表是很難實(shí)現(xiàn)的。
從報(bào)表系統(tǒng)的發(fā)展歷史來(lái)看,在應(yīng)用系統(tǒng)進(jìn)入數(shù)據(jù)共享的時(shí)候,比較專業(yè)的報(bào)表系統(tǒng)或控件就出現(xiàn)了,并且一直沿用至今。這些工具的理論模型和需求都出自于國(guó)外的需求,這種模型和需求比較符合國(guó)外用戶的使用習(xí)慣,比較適合設(shè)計(jì)制作樣式非常規(guī)整,沒(méi)有表格線,沒(méi)有斜線表頭和分層分組的簡(jiǎn)單報(bào)表。然而中國(guó)人的報(bào)表習(xí)慣與國(guó)外用戶存在很大差別,中國(guó)的報(bào)表也比國(guó)外的報(bào)表復(fù)雜許多。報(bào)表是由“報(bào)’’和“表"兩部分組成,“報(bào)”指數(shù)據(jù)的匯總統(tǒng)計(jì),即將數(shù)據(jù)從數(shù)據(jù)庫(kù)中取出按一定規(guī)則運(yùn)算統(tǒng)計(jì)后排列?!氨怼眲t指格式,數(shù)據(jù)需要放在單元格中,才能清楚定位,體現(xiàn)數(shù)據(jù)之間的層次與對(duì)應(yīng)關(guān)系。目前市場(chǎng)上的報(bào)表系統(tǒng)大致分為兩類,一類基本上能把數(shù)據(jù)庫(kù)的數(shù)據(jù)取出來(lái)運(yùn)算排列制作出動(dòng)態(tài)的報(bào)表。但其格式設(shè)計(jì)功能不好,一般是采用控件拖放的方式編輯報(bào)表,靠一個(gè)個(gè)矩形邊線重合對(duì)齊繪制表格,一條直線要拼接多條線段,而且還和分辨率相關(guān),打印出來(lái)不整齊。還有一類仿制Excel的產(chǎn)品,合并單元格、添加邊框非常方便,可以快捷地設(shè)計(jì)出一個(gè)復(fù)雜格式的報(bào)表。但它們的缺點(diǎn)是數(shù)據(jù)處理能力太弱,除了簡(jiǎn)單的格內(nèi)運(yùn)算外,與數(shù)據(jù)庫(kù)打交道的過(guò)濾、分組等統(tǒng)計(jì)運(yùn)算都需要編程實(shí)現(xiàn)。
中國(guó)報(bào)表最困難的地方是數(shù)據(jù)統(tǒng)計(jì)。中國(guó)報(bào)表具有的多數(shù)據(jù)源、整表規(guī)則分片、不完全劃分、跨行組運(yùn)算及獨(dú)立格間運(yùn)算、行列對(duì)稱等特征,是傳統(tǒng)報(bào)表系統(tǒng)無(wú)法滿足的,常常導(dǎo)致要求編寫代碼準(zhǔn)備數(shù)據(jù)或拼接子報(bào)表才能完成一個(gè)復(fù)雜報(bào)表的制作。表樣格式復(fù)雜也是中國(guó)報(bào)表比較麻煩的地方,中國(guó)報(bào)表均要求有整齊的表格線,多層表頭層次分明。業(yè)內(nèi)有名的報(bào)表系統(tǒng)一般采用控件式拖拽的繪制方案,制作表格非常煩瑣,且還與分辨率相關(guān),屏幕與打印不一致,而中國(guó)報(bào)表對(duì)打印樣式要求向來(lái)很高。中國(guó)報(bào)表還會(huì)有填寫的需求,前端需要支持各種填寫控制,如編輯風(fēng)格、自動(dòng)計(jì)算、合法性校驗(yàn)等;填寫好的數(shù)據(jù)能夠方便地寫入數(shù)據(jù)庫(kù)以進(jìn)行下一步的統(tǒng)計(jì)匯總。而很多報(bào)表軟件不支持填寫能力,一般的填報(bào)解決方案都不能自動(dòng)處理數(shù)據(jù)入庫(kù)的問(wèn)題,導(dǎo)致相應(yīng)的編程工作量仍然很大。1.2國(guó)內(nèi)外研究現(xiàn)狀
大部分通用軟件領(lǐng)域,國(guó)外產(chǎn)品都要相對(duì)優(yōu)秀。早期的報(bào)表系統(tǒng)軟件是由國(guó)外的公司和研究機(jī)構(gòu)設(shè)計(jì)實(shí)現(xiàn)的,適合制作樣式非常規(guī)整,沒(méi)有格線,表頭簡(jiǎn)單的國(guó)外報(bào)表。國(guó)外的報(bào)表系統(tǒng)都具有各自的原創(chuàng)技術(shù),又經(jīng)過(guò)了多年的發(fā)展和完善,其技術(shù)相對(duì)都比較成熟,但是國(guó)外的報(bào)表系統(tǒng)在報(bào)表樣式繪制方面的能力比較弱,在價(jià)格上一般都比較昂貴,所以經(jīng)常被稱作高端產(chǎn)品。例如挪威QuSoR公司專門為Delphi編寫的QuickRepon報(bào)表組件,使用
陜西理工學(xué)院畢業(yè)設(shè)計(jì) QuickReport可以迅速設(shè)計(jì)出符合西方人習(xí)慣的報(bào)表,從功能和設(shè)計(jì)上來(lái)說(shuō),不失為一個(gè)較好的報(bào)表設(shè)計(jì)工具,但對(duì)于報(bào)表設(shè)計(jì)的靈活性,及在程序編譯完畢后用戶對(duì)報(bào)表的可修改性等方面還遠(yuǎn)遠(yuǎn)不能滿足用戶的需要。
國(guó)外典型報(bào)表系統(tǒng)中,著名的有Excel,Cwstal Report,F(xiàn)o徹ula One等,隨著.NET技術(shù)的不斷發(fā)展,近年來(lái)國(guó)外已經(jīng)出現(xiàn)了一些基于.NET環(huán)境的報(bào)表系統(tǒng),例如MicrosoR的Reporting Services技術(shù),Ⅵsual Studio 2005集成的報(bào)表解決方案,C搿stal Reports f1叫Visual Studio.NET,Developer Express公司開(kāi)發(fā)的X仃aReports報(bào)表組件和ComponentOne公司開(kāi)發(fā)的C 1 Reports報(bào)表組件等等。其中MicrosoR的Reportillg Services技術(shù)是基于服務(wù)器的報(bào)表解決方案,可以用來(lái)創(chuàng)建和管理包含關(guān)系數(shù)據(jù)源和多維數(shù)據(jù)源中的數(shù)據(jù)的表格、矩陣、圖形和自由格式的報(bào)表,并可通過(guò)網(wǎng)絡(luò)連接來(lái)查看和管理報(bào)表。Reporting Services在報(bào)表的制作、分發(fā)和報(bào)表數(shù)據(jù)的安全性等方面都有很好的表現(xiàn),功能比較全面,但是需要微軟眾多企業(yè)級(jí)解決方案的支持,并且價(jià)格相當(dāng)昂貴。
國(guó)內(nèi)的報(bào)表系統(tǒng)主要是使用Java和Visual C++設(shè)計(jì)實(shí)現(xiàn)的傳統(tǒng)報(bào)表系統(tǒng),傳統(tǒng)報(bào)表系統(tǒng)是指一些主要以條帶式設(shè)計(jì)為基礎(chǔ)的開(kāi)源軟件以及國(guó)內(nèi)的一些仿制產(chǎn)品。這些報(bào)表系統(tǒng)的數(shù)學(xué)模型都是基于SQL/OLAP理論設(shè)計(jì)的,雖然不斷地進(jìn)行改進(jìn),但根本處理方案并沒(méi)有本質(zhì)的變化,遠(yuǎn)遠(yuǎn)不能滿足國(guó)內(nèi)復(fù)雜報(bào)表的制作需求。近年來(lái)不斷推出的新版本以及新報(bào)表系統(tǒng)都只是在技術(shù)上改進(jìn),如從C/S移植到B/S、支持JaVa等,而理論模型仍是原來(lái)的傳統(tǒng)方式,所以仍然算是傳統(tǒng)報(bào)表系統(tǒng)。傳統(tǒng)報(bào)表系統(tǒng)最顯著的特征是主編輯畫面呈條帶狀,以模擬SQL中的seIect和Group運(yùn)算;大部分報(bào)表系統(tǒng)采用繁瑣的拖拽式編輯(有個(gè)別報(bào)表系統(tǒng)開(kāi)始采用方便的表格式);交叉表要采用專門的類OLAP模型處理,樣式和運(yùn)算都比較死板。
國(guó)內(nèi)比較有名的報(bào)表系統(tǒng)基本上都是Java報(bào)表系統(tǒng),主要有用友華表(Cell)和潤(rùn)乾報(bào)表等。潤(rùn)乾報(bào)表是一個(gè)功能非常強(qiáng)大的純Java報(bào)表產(chǎn)品,各方面都很出色,其新一代報(bào)表模型采用了革命性的多源分片、不規(guī)則分組、動(dòng)態(tài)格間運(yùn)算、行列對(duì)稱等技術(shù),能設(shè)計(jì)實(shí)現(xiàn)很多原來(lái)傳統(tǒng)報(bào)表系統(tǒng)中很復(fù)雜,甚至很難實(shí)現(xiàn)的報(bào)表。但是由于潤(rùn)乾報(bào)表設(shè)計(jì)方式完全依賴手寫表達(dá)式,對(duì)于沒(méi)有編程基礎(chǔ)的普通用戶來(lái)說(shuō),學(xué)習(xí)使用潤(rùn)乾報(bào)表的難度較大。1.3常見(jiàn)的典型報(bào)表工具及其介紹
目前常見(jiàn)的典型報(bào)表工具中,著名的有Excel,UniversalForms,Oracle9i Reports,F(xiàn)ormula One等,國(guó)內(nèi)也推出了許多報(bào)表工具。對(duì)現(xiàn)有報(bào)表工具的比較研究,有助于我們?cè)O(shè)計(jì)出更好的報(bào)表工具。1.3.1 Excel Excel是歷史悠久的電子表格程序之一,功能強(qiáng)大。許多后來(lái)出現(xiàn)的Windows報(bào)表系統(tǒng)均受其影響,甚至在功能和界面上加以模仿。Excel具有如下特點(diǎn):
(1)可視化界面:Excel提供工作簿和工作表,一個(gè)工作簿包括若干張工作表,一張工作表即是一張報(bào)表。每張工作表由若干單元格組成,每個(gè)單元格可以單獨(dú)操縱:設(shè)計(jì)單元格的數(shù)據(jù)格式,定義數(shù)據(jù)公式等。對(duì)報(bào)表作出修改后,可以立即看到修改效果;
(2)豐富的格式支持:Excel報(bào)表中可以包括文字,數(shù)字,圖形等多種內(nèi)容;提供文字的字體大小、顏色,數(shù)字的顯示格式等格式控制;
(3)豐富的數(shù)據(jù)處理功能:提供多種數(shù)據(jù)處理函數(shù):數(shù)據(jù)庫(kù)函數(shù)、日期與時(shí)間函數(shù)、工程函數(shù)、財(cái)務(wù)函數(shù)、邏輯函數(shù)、查詢和引用函數(shù)、數(shù)學(xué)和三角函數(shù)、統(tǒng)計(jì)函數(shù)、文本函數(shù);
(4)支持多種數(shù)據(jù)源,可訪問(wèn)的數(shù)據(jù)庫(kù)包括: Microsoft SQL Server OLAP Services、Microsoft Access 2000、dBASE、Microsoft FoxPro、Microsofl Excel、Oracle、Paradox、陜西理工學(xué)院畢業(yè)設(shè)計(jì) SQL Server以及文本文件數(shù)據(jù)庫(kù),此外,還可以使用ODBC驅(qū)動(dòng)程序或數(shù)據(jù)源驅(qū)動(dòng)程序以獲取其他類型數(shù)據(jù)庫(kù)中的信息。
(5)WEB發(fā)布支持
Excel支持將報(bào)表放置到Web頁(yè)上,用戶不需要在計(jì)算機(jī)上安裝Excel就可以訪問(wèn)報(bào)表。(6)支持交互式報(bào)表
如果希望用戶可以與報(bào)表中的數(shù)據(jù)進(jìn)行交互,則可以將數(shù)據(jù)設(shè)置為交互式。在交互式報(bào)表中,用戶可以進(jìn)行以下操作:篩選,輸入新值以進(jìn)行計(jì)算或匯總和分析數(shù)據(jù)。
(7)提供編程環(huán)境
EXcel提供了Visual Basic for Applications(VBA)和Ⅵsual Basic編程環(huán)境,同時(shí)支持OLE。用戶可以使用VBA編寫自定義函數(shù),實(shí)現(xiàn)對(duì)已有數(shù)據(jù)處理函數(shù)庫(kù) 的擴(kuò)充,滿足實(shí)際需要,但有時(shí)編程相對(duì)比較復(fù)雜。1.3.2 Crystal Report Crystal Report是Crystal Decisions公司推出的比較著名的報(bào)表系統(tǒng),使用Crystal Report是一種大型報(bào)表系統(tǒng)常用和推薦的解決方案。它能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的檢索、分組、分析,并把分析結(jié)果以表格的方式展現(xiàn)給用戶,為用戶解決現(xiàn)實(shí)中各種各樣的商業(yè)問(wèn)題。與其他的報(bào)表創(chuàng)建和分析軟件相比,Crystal Report軟件具有穩(wěn)定性、可伸縮性以及應(yīng)用平臺(tái)廣泛等優(yōu)點(diǎn)。Crystal Report不僅有功能強(qiáng)大的Java版的Crystal Report報(bào)表引擎,而且也有直接集成到了Visual Studio開(kāi)發(fā)環(huán)境當(dāng)中來(lái)使用的Crystal Report for visual Studio.NET,開(kāi)發(fā)人員可以從任何項(xiàng)目訪問(wèn)報(bào)表編輯器,完成顯示、統(tǒng)計(jì)、分組和插入圖表等多種操作,它也允許和各種主要的Java集成開(kāi)發(fā)環(huán)境集成在一起。Crystal Report主要具備以下一些功能:
(1)形式多樣的內(nèi)容創(chuàng)建:允許用戶添加圖表、下拉式菜單、警示、參數(shù)提示以及超鏈接,并將報(bào)表轉(zhuǎn)化為引入注目的交互式文件或Web內(nèi)容,使用標(biāo)志、圖畫、形狀和色彩來(lái)定制報(bào)表。而且內(nèi)置了廣泛的公式,使得開(kāi)發(fā)人員可以對(duì)于報(bào)表格式、綜合業(yè)務(wù)邏輯和數(shù)據(jù)進(jìn)行全面的控制;
(2)支持多數(shù)據(jù)源:可以直接編輯SQL,以便不受限制地控制數(shù)據(jù)庫(kù)連接。數(shù)據(jù)源包括XML,OLAP或其它相關(guān)的內(nèi)容。通過(guò)在Microsoft Excel和Access中的Crystal Reports Add-in功能,用戶可以利用現(xiàn)有的Microsoft數(shù)據(jù)創(chuàng)建報(bào)表;
(3)提供分析工具:Crystal Report提供趨勢(shì)判斷、促進(jìn)入際關(guān)系和保留重要論據(jù)的工具。另外附屬報(bào)表、公式、總計(jì)運(yùn)算,以及可自定義的交叉標(biāo)簽提供了更進(jìn)一步的分析能力;
(4)支持Web應(yīng)用:利用Web的權(quán)限設(shè)置功能,Crystal Report讓所有在不同平臺(tái)和地點(diǎn)的用戶都可以訪問(wèn)報(bào)表。Crystal Report與Report Streaming技術(shù)相結(jié)合,以最優(yōu)化處理報(bào)表在線需求(即時(shí))和Web報(bào)表排序次序的效能。
Crystal Report幫助開(kāi)發(fā)者做出了大量的報(bào)表,它的功能也在不斷地加強(qiáng)。但是,開(kāi)發(fā)人員也經(jīng)歷了很多時(shí)刻,不僅僅是費(fèi)勁地去畫格子,擺位置,更發(fā)現(xiàn)很多報(bào)表,需要先做一個(gè)復(fù)雜的視圖,甚至寫程序準(zhǔn)備數(shù)據(jù);發(fā)現(xiàn)許多報(bào)表運(yùn)行起來(lái)的效率會(huì)很低;發(fā)現(xiàn)有些報(bào)表很難做出來(lái)。另外,Crystal Report for Visual Studio.NET未注冊(cè)版本功能可用。在此之后的Save Option將不能使用。為了使用全部的功能,你不得不為之付費(fèi)。1.3.3 Fomula One 它是一個(gè)OLE ActiveX報(bào)表控制引擎,支持Excel電子表格的編輯與運(yùn)行,F(xiàn)ormuloone6以前為基于C/S環(huán)境,其后的版本(如Repert,SPreodsheet等)主要面向B/S環(huán)境。胡于進(jìn)等(2004)在它的基礎(chǔ)上設(shè)計(jì)新報(bào)表組件FIBOOKREPORT,其主要具有以下特點(diǎn):
(1)可以嵌入到應(yīng)用程序中提供報(bào)表功能,也可以獨(dú)立使用;
(2)支持HTML格式輸出:它包括一組API,能夠?qū)⑦x定范圍的表格輸出到一個(gè)HTML文件中;
(3)內(nèi)置計(jì)算器:具有強(qiáng)大的電子表格功能,且與Excel兼容;
陜西理工學(xué)院畢業(yè)設(shè)計(jì)(4)編程支持:Formula One包含了廣泛而豐富的API函數(shù),幫助開(kāi)發(fā)者靈活自如地控制電子表格的制作,為程序員提供了便利的電子表格設(shè)計(jì)工具箱。
雖然,目前通用報(bào)表有了較大的發(fā)展,但是在實(shí)際應(yīng)用中,既開(kāi)源免費(fèi)或價(jià)格便宜,又能滿足用戶要求通用報(bào)表系統(tǒng)能夠簡(jiǎn)單靈活地實(shí)現(xiàn)連接數(shù)據(jù)源、設(shè)定報(bào)表樣式等的報(bào)表很少,市場(chǎng)上的報(bào)表系統(tǒng)存在以下不足:
1.工作量大:企業(yè)的需求是動(dòng)態(tài)、復(fù)雜、多變的。目前的報(bào)表系統(tǒng)中,出于數(shù)據(jù)的顯示或打印格式都是由程序員根據(jù)客戶需要直接在程序制作期間生成的。如果報(bào)表的科目稍有變化,都需重新編譯程序發(fā)布,加重了程序員的維護(hù)工作量;
2。缺乏靈活性:目前的通用報(bào)表系統(tǒng)是不可以自定義取數(shù)據(jù)源與取函數(shù)或公式,而只能選擇系統(tǒng)提供的有限的取數(shù)函數(shù)與公式來(lái)自定義報(bào)表,如果需要實(shí)現(xiàn)對(duì)這些取數(shù)函數(shù)或公式以外的數(shù)據(jù)資源的訪問(wèn)就十分不方便;
3.未實(shí)現(xiàn)跨平臺(tái)連接多個(gè)數(shù)據(jù)源:目前的報(bào)表大部分只能實(shí)現(xiàn)連接單一目標(biāo)數(shù)據(jù)源,未能實(shí)現(xiàn)跨平臺(tái)連接多個(gè)數(shù)據(jù)源,即不能實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)。例如Excel,水晶報(bào)表等都只能連接多種數(shù)據(jù)源,但不能實(shí)現(xiàn)同時(shí)。
2在VB中利用word實(shí)現(xiàn)復(fù)雜報(bào)表
在數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中開(kāi)發(fā)word 文檔自動(dòng)生成程序,可以實(shí)現(xiàn)以下功能:文檔自動(dòng)生成;自動(dòng)添加頁(yè)眉頁(yè)腳;目錄自動(dòng)生成;格式自動(dòng)調(diào)整;文檔格式大眾化,便于傳輸與交流;對(duì)大文檔、復(fù)雜表格處理具有明顯優(yōu)勢(shì):可依用戶要求智能化地生成風(fēng)格各異的文檔等等。實(shí)踐證明,在數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)中,用word文檔自動(dòng)生成程序取代傳統(tǒng)的數(shù)據(jù)庫(kù)報(bào)表輸出,使得開(kāi)發(fā)的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的報(bào)表處理大大改觀,優(yōu)點(diǎn)突出,很值得推廣,本文就是基于word實(shí)現(xiàn)復(fù)雜報(bào)表的設(shè)計(jì)。2.1 VB中Word對(duì)象模型
在VB調(diào)用Word之前,首先要引進(jìn)對(duì)象庫(kù),然后才能以Word為對(duì)象編程。引進(jìn)Word對(duì)象庫(kù)的方法是:在編程環(huán)境下,選擇“工程”菜單,選中“引用”項(xiàng),打開(kāi)“引用”對(duì)話框,在“可用的引用”列表中選中“Microsoft Word11.0 Object Library”,即可在Word中引進(jìn)對(duì)象庫(kù)。
Visual Basic支持的Word對(duì)象集合直接對(duì)應(yīng)于Microsoft Word中的各個(gè)元素。例如,Document對(duì)象代表了一個(gè)打開(kāi)的文檔,Bookmark對(duì)象代表了一個(gè)文檔中的書簽,而Selection對(duì)象則代表了在一個(gè)文檔窗口窗格中的選定內(nèi)容。在Word中,每一類元素(文檔、表格、段落、書簽、域等等)都可以用Visual Basic的對(duì)象來(lái)表示。要在Word中自動(dòng)執(zhí)行任務(wù),可以使用這些對(duì)象的方法和屬性。
主要Word對(duì)象有以下6個(gè):(1)Application對(duì)象
當(dāng)用戶打開(kāi)一個(gè)Word文檔,也創(chuàng)建了一個(gè)Application 對(duì)象,它表示運(yùn)行的應(yīng)用程序。也可以把Application對(duì)象看成應(yīng)用程序?qū)ο蟮娜萜?,Application對(duì)象中包容了Word 的菜單欄、工具欄、Word命令等的相應(yīng)對(duì)象以及文件對(duì)象等。菜單欄對(duì)象中包容了所有的菜單及菜單命令。工具欄對(duì)象中包容了各種命令按鈕。文件對(duì)象中則包容了所有的文字、表格、圖像等文件組成部分的相應(yīng)對(duì)象。
用戶可以利用Application對(duì)象的屬性或方法來(lái)控制或返回應(yīng)用程序范圍內(nèi)的特性、控制Word窗口的外觀或調(diào)整Word對(duì)象模型的其它方面。例如Application.PrintPreview=True 將從視圖狀態(tài)切換到打印預(yù)覽狀態(tài)。
Application對(duì)象的屬性也可以訪問(wèn)處于對(duì)象層次中較低級(jí)的對(duì)象,比如Windows集合(代表了當(dāng)前所有打開(kāi)的窗口)和Documents集合(代表了當(dāng)前所有打開(kāi)的文檔)。用戶可以通過(guò)一些屬性,從對(duì)象層次中最高一級(jí)的Application 對(duì)象向下訪問(wèn)到較低級(jí)的對(duì)象(Document對(duì)象、Window對(duì)象、Selection對(duì)象等)。
(2)Document對(duì)象
陜西理工學(xué)院畢業(yè)設(shè)計(jì) 當(dāng)用戶在Word中打開(kāi)或創(chuàng)建一個(gè)文件的同時(shí),也創(chuàng)建了一個(gè)Document對(duì)象。在Word中,Document對(duì)象表示一個(gè)打開(kāi)的文檔,而且所有的Document對(duì)象都是Application對(duì)象的Documents集合的成員。幾乎所有的操作都要調(diào)用Document對(duì)象本身或其內(nèi)容,用戶可以使用Document對(duì)象或Documents 集合的屬性或方法來(lái)打開(kāi)、創(chuàng)建、保存、啟動(dòng)或者關(guān)閉文件。
每一個(gè)Document對(duì)象都具有Characters、Words、Sentences和Paragraphs四個(gè)集合??梢允褂谜Z(yǔ)法Documents(index)來(lái)返回作為一個(gè)Document對(duì)象的任何打開(kāi)的文檔,index是該文件的名字或索引號(hào)。但是當(dāng)用戶添加或關(guān)閉多個(gè)文檔時(shí),某個(gè)特定文件的索引號(hào)會(huì)發(fā)生改變,所以最好使用文檔的名字來(lái)對(duì)Documents集合中的Document對(duì)象進(jìn)行索引。
要打開(kāi)一個(gè)文檔,可以使用open方法;要?jiǎng)?chuàng)建一個(gè)新文檔,可以對(duì)Documents應(yīng)用Add方法;要保存文檔可以使用SaveAS方法或是Save方法;要關(guān)閉一個(gè)文件,可以對(duì)Document對(duì)象應(yīng)用Close方法??梢允褂肁dd方法來(lái)向文件中添加諸如表格、備注、注腳這樣的對(duì)象。
要使一個(gè)文檔成為活動(dòng)文檔,可以對(duì)Document應(yīng)用Active方法啟動(dòng)它。具有焦點(diǎn)的文檔稱為活動(dòng)文檔,由Active-Document屬性表示。使用Open方法打開(kāi)的文檔,或者使用Add方法創(chuàng)建的文檔,都將成為用ActiveDocument屬性表示的當(dāng)前活動(dòng)文檔。
(3)Range對(duì)象
Range對(duì)象表示文件中的一塊連續(xù)的區(qū)域。每一個(gè)Range對(duì)象都由一個(gè)起始字符位置和一個(gè)終止字符位置定義。這個(gè)連續(xù)范圍可以小到只是一個(gè)插入點(diǎn),大可到整個(gè)文檔。在同一個(gè)文檔中也可以定義多個(gè)Range對(duì)象。Range對(duì)象中的字符包含非打印字符,例如空格、回車符和段落標(biāo)記。在確定Range對(duì)象后,就能夠應(yīng)用該對(duì)象的方法和屬性來(lái)修改相應(yīng)范圍內(nèi)的內(nèi)容或格式。
可以通過(guò)使用Range方法在指定文檔中創(chuàng)建一個(gè)Range對(duì)象??梢詫tart和End參數(shù)設(shè)置為同一個(gè)數(shù)字,將創(chuàng)建一個(gè)不包含任何字符的Range,相當(dāng)于一個(gè)插入點(diǎn)。也可以通過(guò)其它對(duì)象(例如Paragraph對(duì)象、Bookmark 對(duì)象、Character對(duì)象、Word對(duì)象、Sentences對(duì)象或Selction對(duì)象)的Range屬性來(lái)返回一個(gè)Range對(duì)象。
使用Range對(duì)象的Text屬性可以返回或設(shè)置這個(gè)Range對(duì)象中的內(nèi)容或格式。
可以使用SetRange方法來(lái)設(shè)置或重新定義一個(gè)已經(jīng)存在的Range對(duì)象。也可通過(guò)使用Range對(duì)象的Start 屬性或MoveStart方法指定或重新定義Range 開(kāi)始的位置,或是使用Range對(duì)象的End屬性或MoveEnd方法指定或重新定義Range結(jié)束的位置。可以使用Bookmark、Selection或Range對(duì)象的Start和End屬性來(lái)指定Range方法的Start和End參數(shù)。
(4)Selection對(duì)象
當(dāng)用戶想要自己的代碼對(duì)選定內(nèi)容做出響應(yīng)或是改變選定內(nèi)容,就可以通過(guò)Selection對(duì)象來(lái)完成任務(wù)。Selection對(duì)象可以在Application對(duì)象,Window對(duì)象,Pane對(duì)象中使用。Selection對(duì)象就像在Word對(duì)話中交互式工作時(shí)的插入點(diǎn)或當(dāng)前選項(xiàng)。所以Selection對(duì)象可以收縮為插入點(diǎn),也可以包括一個(gè)或幾個(gè)字符和文件項(xiàng)目,甚至可以包括任何文檔部分的內(nèi)容。
用戶可以在一個(gè)選定內(nèi)容中控制操縱對(duì)象。
可以使用Selection屬性來(lái)返回Selection對(duì)象,如果隨同Application對(duì)象使用Selection屬性,則該Selection對(duì)象表示活動(dòng)的選定內(nèi)容。如隨同一個(gè)Windows對(duì)象或是Pane對(duì)象使用Selection屬性,則返回一個(gè)在特定窗口或窗口窗格中Selection對(duì)象。
每個(gè)文件的每個(gè)窗口中都可以有Selection對(duì)象,但每個(gè)窗口中只能啟動(dòng)一個(gè)Selection對(duì)象,在任何時(shí)刻都只能有一個(gè)活動(dòng)的Selection選項(xiàng)。
用戶也可以通過(guò)MoveStart和MoveEnd方法,或者通過(guò)改變Selection對(duì)象的Start屬性及End 屬性的值來(lái)移動(dòng)或擴(kuò)展選定內(nèi)容。用戶也可以通過(guò)GoToNext方法、GoToPrevious方法或GoTo方法來(lái)移動(dòng)選定內(nèi)容。在一個(gè)文件窗口或窗格中只能有一個(gè)選定內(nèi)容,因此用戶也可以通過(guò)使用Select方法選擇文檔的另一個(gè)對(duì)象來(lái)移動(dòng)選定內(nèi)容。在使用Select方法
陜西理工學(xué)院畢業(yè)設(shè)計(jì) 之后,就可以使用Select屬性返回一個(gè)Select對(duì)象。
(5)Find和Replacement對(duì)象
Find對(duì)象包含與“查找”和“替換”對(duì)話框(在“編輯”菜單中)里的選項(xiàng)有關(guān)的屬性??梢允褂肍ind和Replacement對(duì)象來(lái)查找并且替換文檔中文字的特定范圍。Replacement對(duì)象表示查找-替換操作的替換條件。Replacement對(duì)象的屬性和方法對(duì)應(yīng)于“查找”和“替換”對(duì)話框(在“編輯”菜單中)里的選項(xiàng)。
Find對(duì)象可以在Selection對(duì)象或Range對(duì)象中使用(根據(jù)Find對(duì)象是從Selection對(duì)象還是從Range對(duì)象返回的,查找操作也略有不同)??梢栽贔ind對(duì)象中使用Replacement對(duì)象。
如果是在Selection對(duì)象中使用Find對(duì)象,那么當(dāng)找到符合選擇條件的文本后選定內(nèi)容將會(huì)改變。如果是在Range對(duì)象中使用Find對(duì)象,選定內(nèi)容不會(huì)改變,但是當(dāng)找到符合選擇條件的文本時(shí)范圍會(huì)被重新定義。
(6)Table、Column、Row、Cell對(duì)象
word對(duì)象模型包含了表格對(duì)象,也包含了表格中各種不同元素的對(duì)象。
軟件調(diào)試流程圖
第二篇:VB中水晶報(bào)表使用
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
VB中水晶報(bào)表使用
第一步:
在VB工程中Project菜單加入“Add Crystal Report 9”,報(bào)表名使用默認(rèn)即可。這時(shí)Form2(Crystal Rerport自動(dòng)添加的Form,假設(shè)名為Form2)被自動(dòng)分配了如下代碼:
Option Explicit dim Report as New Cystal1
Private Sub Form_Load()
Screen.MousePointer = vbHourglass '調(diào)用水晶報(bào)表時(shí)置鼠標(biāo)為沙漏狀
CRViewer91.ReportSource = Report '該語(yǔ)句的賦值將在后面被修改
CRViewer91.ViewReport Screen.MousePointer = vbDefault '調(diào)用水晶報(bào)表完成后置鼠標(biāo)為默認(rèn)形狀
End Sub
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
Private Sub Form_Resize()
CRViewer91.Top = 0 CRViewer91.Left = 0 CRViewer91.Height = ScaleHeight CRViewer91.Width = ScaleWidth End Sub
第二步:
點(diǎn)擊Crystal Report設(shè)計(jì)器的“數(shù)據(jù)庫(kù)字段”,選定“數(shù)據(jù)庫(kù)專家...”,然后點(diǎn)“創(chuàng)建新連接”,再點(diǎn)“僅字段定義”,創(chuàng)建“數(shù)據(jù)庫(kù)定義”文件,字段名和寬度和原數(shù)據(jù)庫(kù)表保持一致。最后,在數(shù)據(jù)庫(kù)字段中獲得了相應(yīng)字段,將其置于報(bào)表上,按水晶報(bào)表的要求配置。
第三步:
該步驟非常關(guān)鍵,添加一個(gè)Modual到工程文件中,定義全局的ADODB變量,實(shí)現(xiàn)數(shù)據(jù)庫(kù)和水晶報(bào)表的動(dòng)態(tài)連接。代碼如下:
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
Public conn As New ADODB.Connection Public rs As New ADODB.Recordset
第四步:
關(guān)于VB程序的ADO數(shù)據(jù)庫(kù)連接注意事項(xiàng),請(qǐng)看下面的打印按鈕例程。
Private Sub Command1_Click()
Dim connstr As String
If conn.State = adStateOpen Then conn.Close
connstr = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & App.Path & “prtest.mdb;Persist Security Info=False” 'prtest.mdb是程序當(dāng)前目錄的測(cè)試Access數(shù)據(jù)庫(kù)
conn.ConnectionString = connstr
conn.Open
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
conn.CursorLocation = adUseClient
If rs.State = adStateOpen Then rs.Close
rs.Open “test”, conn, adOpenKeyset, adLockReadOnly
' Report.Database.SetDataSource rs, 3, 1 '此行取消
Form2.Show 1 '數(shù)據(jù)庫(kù)連接完成后,調(diào)用Form2水晶報(bào)表工程
End Sub
需要提請(qǐng)大家注意的是,上面代碼中的Report.Database.SetDataSource rs, 3, 1是初用水晶報(bào)表的程序員容易犯的錯(cuò)誤,使用該語(yǔ)句后將造成數(shù)據(jù)庫(kù)和水晶報(bào)表的連接失敗。如何動(dòng)態(tài)調(diào)用水晶報(bào)表呢?請(qǐng)看第五步。
第五步:
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
創(chuàng)建水晶報(bào)表和數(shù)據(jù)庫(kù)數(shù)據(jù)源的連接,需要修改上面Form2的代碼。
Option Explicit 'dim Report as New Cystal1 '上面一行取消
Private Sub Form_Load()
Dim oApp As New CRAXDRT.Application Dim oRpt As CRAXDRT.Report Dim reportName As String '上面三行是新增加的
Screen.MousePointer = vbHourglass
reportName = “rptPr1.rpt”
'定義要引用的rpt文件
Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
oRpt.Database.SetDataSource rs '連接水晶報(bào)表和數(shù)據(jù)源
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
oRpt.ReadRecords
CRViewer91.ReportSource = oRpt '啟用水晶報(bào)表的預(yù)覽功能
CRViewer91.ViewReport Screen.MousePointer = vbDefault
End Sub
Private Sub Form_Resize()
CRViewer91.Top = 0 CRViewer91.Left = 0 CRViewer91.Height = ScaleHeight CRViewer91.Width = ScaleWidth End Sub
Private Sub Form_Unload(Cancel As Integer)
'Set Report = Nothing
精心收集
精心編輯
精致閱讀 如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
Set rs = Nothing
Set conn = Nothing
Unload Form2 End Sub
上面介紹了在VB中使用水晶報(bào)表進(jìn)行報(bào)表開(kāi)發(fā)的一種方法,該方法簡(jiǎn)單易用,適合初學(xué)者上手。
[ 結(jié) 束 ]
VB.NET中使用水晶報(bào)表總結(jié)
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
水晶報(bào)表是一個(gè)優(yōu)秀的報(bào)表開(kāi)發(fā)工具,本人在開(kāi)發(fā)通用管理系統(tǒng)的時(shí)候,所有報(bào)表都使用水晶報(bào)表,其簡(jiǎn)單、易用和強(qiáng)大的功能令筆者倍加喜愛(ài),現(xiàn)將水晶報(bào)表使用手記呈現(xiàn)給大家。
一、在使用自帶的水晶報(bào)表時(shí),請(qǐng)注冊(cè),否則只能使用30次
二、使用CrystalReportViewer進(jìn)行預(yù)覽
CrystalReportViewer控件允許在應(yīng)用程序中查看 Crystal Report。ReportSource 屬性用于設(shè)置要查看哪個(gè)報(bào)表。該屬性設(shè)置之后,報(bào)表顯示在查看器中。報(bào)表源可以是ReportDocument、報(bào)表文件的路徑,也可以是強(qiáng)類型報(bào)表。
1.打開(kāi)“工具箱”,并將一個(gè) CrystalReportViewer 拖到窗體上,我們命名為rptVew。
2.通過(guò)拖放操作將 Windows 窗體查看器調(diào)整到希望的大小并將其移動(dòng)到所需位置。
3.當(dāng)運(yùn)行應(yīng)用程序時(shí),報(bào)表將顯示在查看器中。
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
三、創(chuàng)建新報(bào)表
1.指向“添加”,單擊“添加新項(xiàng)”。
2.在“添加新項(xiàng)”對(duì)話框中,從“模板”區(qū)域選擇 Crystal Report,將報(bào)表命名為rptClient,單擊“打開(kāi)”。
3.在 Crystal Report 庫(kù)中,選擇下列選項(xiàng)之一:
· 使用報(bào)表專家 — 指導(dǎo)您完成報(bào)表的創(chuàng)建過(guò)程,并將您的選擇添加到 Crystal Report Designer。
· 作為空白報(bào)表 — 打開(kāi) Crystal Report Designer。
· 來(lái)自于現(xiàn)有的報(bào)表 — 創(chuàng)建新報(bào)表,它與指定的另一報(bào)表設(shè)計(jì)相同。
注意 Crystal Report 庫(kù)包含許多專家,可以指導(dǎo)您完成數(shù)個(gè)特定類型報(bào)表的創(chuàng)建工作。您可能希望使用專家來(lái)創(chuàng)建最初的報(bào)表,以確定哪種報(bào)表構(gòu)造方法適合您的需要。
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
4.單擊“確定”按鈕。
如果選擇使用“報(bào)表專家”,便會(huì)出現(xiàn)“報(bào)表專家”對(duì)話框,并帶有數(shù)據(jù)資源管理器。為每個(gè)文件夾選擇所需數(shù)據(jù),完成“報(bào)表專家”選項(xiàng)卡界面上的操作,然后單擊“完成”來(lái)訪問(wèn) Crystal Report Designer 和您的報(bào)表
四、是否需要?jiǎng)討B(tài)設(shè)置數(shù)據(jù)源?
Crystal Reports 通過(guò)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序與數(shù)據(jù)庫(kù)連接。每個(gè)驅(qū)動(dòng)程序都被編寫為可處理特定數(shù)據(jù)庫(kù)類型或數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)。
拉和推模型
為了向開(kāi)發(fā)人員提供最靈活的數(shù)據(jù)訪問(wèn)方法,Crystal Reports 數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序被設(shè)計(jì)為可同時(shí)提供數(shù)據(jù)訪問(wèn)的拉模型和推模型。
拉模型
在拉模型中,驅(qū)動(dòng)程序?qū)⑦B接到數(shù)據(jù)庫(kù)并根據(jù)需要將數(shù)據(jù)“拉”進(jìn)來(lái)。使用這種模型時(shí),與數(shù)據(jù)庫(kù)的連接和為了獲取數(shù)據(jù)而執(zhí)行的 SQL 命令都同時(shí)由 Crystal Reports 本身處理,不需要開(kāi)發(fā)人員編寫
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
代碼。如果在運(yùn)行時(shí)無(wú)須編寫任何特殊代碼,則使用拉模型。
推模型
相反,推模型需要開(kāi)發(fā)人員編寫代碼以連接到數(shù)據(jù)庫(kù),執(zhí)行 SQL 命令以創(chuàng)建與報(bào)表中的字段匹配的記錄集或數(shù)據(jù)集,并且將該對(duì)象傳遞給報(bào)表。該方法使您可以將連接共享置入應(yīng)用程序中,并在 Crystal Reports 收到數(shù)據(jù)之前先將數(shù)據(jù)篩選出來(lái)。
四、從 ADO.NET 數(shù)據(jù)集制作報(bào)表
從數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)集對(duì)象
1.在項(xiàng)目中新建一個(gè)架構(gòu)文件:
a.在解決方案資源管理器中,右擊項(xiàng)目名,指向“添加”,然后單擊“添加新項(xiàng)”。
b.在“添加新項(xiàng)”對(duì)話框的“類別”區(qū)域,展開(kāi)文件夾,然后選擇“數(shù)據(jù)”。
c.在“模板”區(qū)域選擇“數(shù)據(jù)集”。
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
d.接受默認(rèn)名稱 DataSet1.xsd。
這就創(chuàng)建了一個(gè)新的架構(gòu)文件(DataSet1.xsd),以后將用它來(lái)生成強(qiáng)類型數(shù)據(jù)集。該架構(gòu)文件將顯示在 ADO.NET 數(shù)據(jù)集設(shè)計(jì)器中。
2.指定數(shù)據(jù)庫(kù)位置:
a.在服務(wù)器資源管理器中,右擊“數(shù)據(jù)連接”并選擇“添加連接”。
b.在“數(shù)據(jù)鏈接屬性”對(duì)話框中,單擊“提供程序”選項(xiàng)卡,然后選擇一個(gè)提供程序(例如 Microsoft OLE DB Provider for SQL Server)。
c.單擊“連接”選項(xiàng)卡,然后指定您的數(shù)據(jù)庫(kù)所在位置。在所需位置輸入服務(wù)器和登錄信息。
d.單擊“確定”按鈕。
此時(shí),您的數(shù)據(jù)庫(kù)及其表和字段就出現(xiàn)在服務(wù)器資源管理器的“數(shù)據(jù)連接”節(jié)點(diǎn)下面。
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
3.在解決方案資源管理器中,雙擊 DataSet1.xsd(如果它尚不是活動(dòng)視圖)。
DataSet1.xsd 現(xiàn)在應(yīng)顯示在“數(shù)據(jù)集”選項(xiàng)卡中。
4.若要為數(shù)據(jù)集建立架構(gòu),請(qǐng)將需要的表從服務(wù)器資源管理器中拖動(dòng)到 DataSet1.xsd 的“數(shù)據(jù)集”選項(xiàng)卡上。
5.單擊“保存 DataSet1.xsd”來(lái)保存“Dataset1.xsd”文件。
6.在“生成”菜單上,單擊“生成”為項(xiàng)目生成數(shù)據(jù)集對(duì)象。
ADO.NET 數(shù)據(jù)集對(duì)象提供數(shù)據(jù)的描述,從它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“數(shù)據(jù)庫(kù)專家”從 ADO.NET 數(shù)據(jù)集對(duì)象添加表。
請(qǐng)?jiān)谑褂谩皥?bào)表專家”創(chuàng)建新報(bào)表時(shí)調(diào)用“數(shù)據(jù)庫(kù)專家”?;蛘?,要從一個(gè)已經(jīng)使用 ADO.NET 建立好的報(bào)表中訪問(wèn)“數(shù)據(jù)庫(kù)專家”,請(qǐng)?jiān)?Report Designer 中右擊,指向“數(shù)據(jù)庫(kù)”,然后單擊“添加/刪除數(shù)據(jù)庫(kù)”。
將報(bào)表連接到 ADO.NET 數(shù)據(jù)集對(duì)象
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
1.在“數(shù)據(jù)庫(kù)專家”中,展開(kāi)“項(xiàng)目數(shù)據(jù)”文件夾。
2.展開(kāi)“ADO.NET 數(shù)據(jù)集”文件夾。
3.選擇所需數(shù)據(jù)集對(duì)象。
例如,如果當(dāng)時(shí)使用的是從項(xiàng)目“WindowsApplication1”的架構(gòu)文件“DataSet1.xsd”中生成的數(shù)據(jù)集對(duì)象,則應(yīng)該選擇“WindowsApplication1.Dataset1”。
4.選擇要向報(bào)表中添加的表,和使用其他數(shù)據(jù)源一樣。
五、動(dòng)態(tài)改變數(shù)據(jù)源的代碼
Dim dsDataSet As New DataSet()
Dim oRpt As New rptClient()'已建立的報(bào)表rptClient
請(qǐng)讀者自行填充數(shù)據(jù)集dsDataSet
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
'使用“報(bào)表引擎”對(duì)象模型將填充的數(shù)據(jù)集,傳遞給報(bào)表
oRpt.SetDataSource(dsDataSet.Tables(0))
' 將帶有數(shù)據(jù)的報(bào)表對(duì)象綁定到 Windows 窗體查看器,rptVew(CrystalReportViewer控件)
rptVew.ReportSource = oRpt
注意 FillDataSet 方法可連接到指定的數(shù)據(jù)庫(kù),提取數(shù)據(jù),然后斷開(kāi)數(shù)據(jù)庫(kù)連接。如果您希望將數(shù)據(jù)庫(kù)中的多個(gè)表添加到報(bào)表中,請(qǐng)使用 SQL JOIN 語(yǔ)句將這些表聯(lián)接在一起;然后在 FillDataSet 方法中指定一個(gè)結(jié)果表
六、創(chuàng)建主從報(bào)表
在報(bào)表中,有許多報(bào)表是主從表結(jié)構(gòu),比如訂單與訂單商品明細(xì),訂單是一個(gè)表中的一條記錄,而分錄是另一個(gè)表中的多條記錄,兩個(gè)表通過(guò)一個(gè)字段關(guān)聯(lián)起來(lái),這種報(bào)表可利用其分組功能實(shí)現(xiàn),1.新建一個(gè)工程
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
2.往FORM1中添加一個(gè)CrystalReportViewer控件
3.在服務(wù)噐資源管理器中連接到SQL SERVER 2000上的Northwind數(shù)據(jù)庫(kù)
4.添加一個(gè)數(shù)據(jù)集DataSet1,將服務(wù)器資源管理器中的Orders和 Order Details加入到數(shù)據(jù)集中。
5.添加一個(gè)水晶報(bào)表,使用報(bào)表專家,在項(xiàng)目數(shù)據(jù)中選擇“ADO.NET數(shù)據(jù)集”,插入表Orders和 Order Details,“鏈接”中是關(guān)聯(lián)字段的鏈接,在“字段”中選擇要顯示的主表和明細(xì)表的字段,組中選擇分組依據(jù)為Orders表OrdersID字段,總計(jì),圖表,選擇(可進(jìn)行篩選),樣式(可設(shè)置報(bào)表標(biāo)題),可自行設(shè)置。設(shè)置完后,點(diǎn)擊完成。
6.在報(bào)表設(shè)計(jì)器中調(diào)整需要顯示的字段的位置、寬度等。
7.在窗口中添加代碼。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
Dim oRpt As New CrystalReport1()
Dim dsDataSet As New Dataset1()
Dim CN As New Data.SqlClient.SqlConnection(“data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa”)
CN.Open()
Dim daOrders As New Data.SqlClient.SqlDataAdapter(“select * from orders”, CN)
daOrders.Fill(dsDataSet, “orders”)
Dim daDetails As New Data.SqlClient.SqlDataAdapter(“select * from [Order Details]”, CN)
daDetails.Fill(dsDataSet, “Order Details”)
'使用“報(bào)表引擎”對(duì)象模型將填充的數(shù)據(jù)集,傳遞給報(bào)表
oRpt.SetDataSource(dsDataSet)
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
CrystalReportViewer1.ReportSource = oRpt
End Sub
8、運(yùn)行程序
七、用程序改變報(bào)表中text的文本
代碼如下:
Dim GetTextObject As TextObject
' 按名稱獲取 ReportObject,將其轉(zhuǎn)換為 TextObject,并返回此對(duì)象。
GetTextObject = orpt.ReportDefinition.ReportObjects.Item(“text13”)
GetTextObject.Text = “XXXX系統(tǒng)”
總結(jié):水晶報(bào)表具有非常強(qiáng)大的功能,還可進(jìn)行導(dǎo)出WORD、EXCEL、RTF等文件,還可生成復(fù)雜、漂亮圖表,是進(jìn)行WEB和Windows報(bào)表開(kāi)發(fā)的利器
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
使用5種不同的方法加載水晶報(bào)表(Windows 窗體)2008年01月19日 星期六 下午 04:081、用作 viewer.reportsource 的5種類型的報(bào)表:
-使用 Report 名(通過(guò)文本路徑)使用非類型的 Report 組件(通過(guò)文本路徑和 ReportDocument reportdocument1)使用強(qiáng)類型的 Report 組件()(通過(guò) ReportDocument world_Sales_Report1)
注:Report 組件即“工具箱”-〉“組件”-〉“ReportDocument”
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
2、代碼簡(jiǎn)介:
-使用 Report 名(通過(guò)文本路徑)CrystalReportViewer1.ReportSource = “C:Crystalcrnetvbnet_win_simplepreviewreportWorld Sales Report.rpt” '------使用非類型的 Report 組件(通過(guò)文本路徑和 ReportDocument reportdocument1)Dim reportdocument1 As New CrystalDecisions.CrystalReports.Engine.ReportDocument()reportdocument1.Load(“C:Crystalcrnetvbnet_win_simplepreviewreportWorld Sales Report.rpt”)CrystalReportViewer1.ReportSource = reportdocument1
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
演講稿 工作總結(jié) 調(diào)研報(bào)告 講話稿 事跡材料 心得體會(huì) 策劃方案
'------使用強(qiáng)類型的 Report 組件()(通過(guò) ReportDocument world_Sales_Report1)
CrystalReportViewer1.ReportSource = world_Sales_Report1
精心收集
精心編輯
精致閱讀
如需請(qǐng)下載!
第三篇:ATM系統(tǒng)實(shí)現(xiàn)報(bào)告(VB)
面向?qū)ο蠓椒ㄔO(shè)計(jì)與實(shí)現(xiàn)報(bào)告
—ATM機(jī)系統(tǒng)
軟件0802班
高曉亮
200807040203
一、概要
根據(jù)ATM的需求分析,該系統(tǒng)設(shè)計(jì)為2個(gè)子系統(tǒng):用戶系統(tǒng)、銀行工作人員系統(tǒng)。其中用戶系統(tǒng)主要使用戶在ATM上完成一些基本操作,例如:存款、取款、轉(zhuǎn)賬、查詢余額、修改賬戶密碼等銀行工作人員系統(tǒng)主要用來(lái)管理用戶賬戶、ATM機(jī)、事務(wù)。其具體功能和界面及代碼將在下文敘述。
說(shuō)明:該系統(tǒng)主要代碼是用vb編寫,數(shù)據(jù)庫(kù)使用的是單機(jī)數(shù)據(jù)庫(kù)access。
二、用戶系統(tǒng)
A:主要界面介紹: 一)、待機(jī)界面:
1、功能:系統(tǒng)歡迎界面,點(diǎn)擊模擬按鈕開(kāi)始模擬ATM機(jī)工作。
2、說(shuō)明:由于沒(méi)有找到合適的廣告圖片,所以待機(jī)默認(rèn)先用藍(lán)色背景代替。
3、界面文字動(dòng)畫代碼如下:If Label5(0).Left > Me.ScaleWidth Then
Label5(0).Left = Me.Left100 End If
Label5(1).Move Label5(1).Left + 120
4、界面截圖如下:
二)、登陸界面:
1、功能:a、密碼框設(shè)置只能輸入6位
B、密碼輸入3次錯(cuò)誤,將凍結(jié)該賬戶
C、銀行卡號(hào)不存在、凍結(jié)或密碼錯(cuò)誤,均不能進(jìn)入系統(tǒng)
2、說(shuō)明:因?yàn)楦縻y行卡號(hào)位數(shù)不太一樣,銀行卡號(hào)位數(shù)并未設(shè)置。
3、登陸確認(rèn)按鈕代碼如下: Private Sub Command27_Click()If Not Text7.Text = “" And Not Text8.Text = ”“ Then Dim sql As String sql = ”select * from 賬戶 where 銀行卡號(hào)='“ & Trim(Text7.Text)& ”'“
Adodc1.RecordSource = sql
Adodc1.Refresh
If Adodc1.Recordset(”狀態(tài)“)= ”凍結(jié)“ Then '判斷該賬戶狀態(tài)
MsgBox ”該賬戶已凍結(jié)!“
Text7.Text = ”“
Text8.Text = ”“
Else
sql = ”select * from 賬戶 where 銀行卡號(hào)='“ & Trim(Text7.Text)& ”' and 密碼=“ & Trim(Text8.Text)& ”“
Adodc1.RecordSource = sql
Adodc1.Refresh
If Adodc1.Recordset.EOF Then
MsgBox ”密碼錯(cuò)誤!“, 48, ”錯(cuò)誤提示“
Text8.Text = ”“
count1 = count1 + 1
If count1 >= 3 Then '三次輸入錯(cuò)誤凍結(jié)該賬戶
Adodc1.Refresh
sql = ”select * from 賬戶 where 銀行卡號(hào)='“ & Trim(Text7.Text)& ”'“
Adodc1.RecordSource = sql
Adodc1.Refresh
Adodc1.Recordset(”狀態(tài)“)= ”凍結(jié)“
Adodc1.Recordset.Update
MsgBox(”三次輸入錯(cuò)誤,該賬戶已被凍結(jié)“)
End If
Else
Label10.Visible = False
Label11.Visible = False
Text7.Visible = False
Text8.Visible = False
Command27.Visible = False Command28.Visible = False Command14.Visible = True Command15.Visible = True Command16.Visible = True Command17.Visible = True Command18.Visible = True Command19.Visible = True Command24.Visible = True Ynum = Text7.Text Adodc2.Refresh ’添加事務(wù) Adodc2.Recordset.AddNew
Adodc2.Recordset(”銀行卡號(hào)“)= Ynum
Adodc2.Recordset(”事務(wù)類型“)= ”用戶登錄“
Adodc2.Recordset(”時(shí)間“)= Now()
Adodc2.Recordset(”事務(wù)描述“)= ”用戶完成登陸“
Adodc2.Recordset.Update
Adodc2.Refresh Text7.Text = ”“ Text8.Text = ”“ End If End If Else MsgBox(”信息不全!請(qǐng)確認(rèn)“)End If End Sub
4、界面截圖如下:
三)、系統(tǒng)主界面
1、功能:ATM的主要功能陳列,供用戶選擇,其中包括存款、取款、轉(zhuǎn)賬、查詢余額、修改密碼、取卡、返回。當(dāng)賬戶登錄時(shí),將在事務(wù)表中記錄登錄時(shí)間。
2、說(shuō)明:由于所有按鈕均只是用來(lái)調(diào)出對(duì)應(yīng)的功能的界面,并沒(méi)有實(shí)際功能,所以在此省略其按鈕代碼。
3、界面截圖如下:
四)、存款界面
1、功能:a、只允許用戶輸入100的整數(shù)值
b、當(dāng)文本框?yàn)榭諘r(shí)報(bào)錯(cuò)
c、實(shí)現(xiàn)用戶的存款功能
d、每存入一筆款,都將在事務(wù)表中記錄該操作
2、存款代碼如下:If Not Text12.Text = ”“ Then If Val(Text12.Text)Mod 100 = 0 Then Adodc1.Refresh Adodc1.Recordset(”余額“)= Adodc1.Recordset(”余額“)+ Val(Text12.Text)Adodc1.Recordset.Update Adodc1.Refresh Label15.Caption = ”存款成功“ ye = ye + Text12.Text Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”銀行卡號(hào)“)= Ynum
Adodc2.Recordset(”事務(wù)類型“)= ”存款“
Adodc2.Recordset(”時(shí)間“)= Now()
Adodc2.Recordset(”事務(wù)描述“)= ”用戶存入“ & Text12.Text & ”元“
Adodc2.Recordset.Update
Adodc2.Refresh Text12.Text = ”“ Command33.Enabled = True Command32.Enabled = False Else MsgBox ”請(qǐng)輸入100的整數(shù)“ End If Else Label15.Caption = ”無(wú)款可存“ End If End Sub
3、界面截圖如下:
四)、取款界面
1、功能:a、用戶按相對(duì)應(yīng)數(shù)值的按鈕進(jìn)行取款
b、每個(gè)賬戶每天取款數(shù)不能超過(guò)2500
c、賬戶余額不足時(shí),報(bào)錯(cuò)
d、用戶每取走一筆款額,都將在事務(wù)表中記錄取走金額和時(shí)間
2、說(shuō)明:由于不同數(shù)值按鈕的代碼很相似,所以這里僅給出100按鈕的代碼
3、存款代碼如下:Private Sub Command20_Click()Adodc1.Refresh If Adodc1.Recordset(”余額“)>= 100 Then Adodc1.Refresh Adodc1.Recordset(”余額“)= Adodc1.Recordset(”余額“)100 Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”銀行卡號(hào)“)= Ynum
Adodc2.Recordset(”事務(wù)類型“)= ”取款“
Adodc2.Recordset(”時(shí)間“)= Now()
Adodc2.Recordset(”事務(wù)描述“)= ”用戶取走100元“
Adodc2.Recordset.Update
Adodc2.Refresh Else Label15.Caption = ”余額不足,取款失敗“ End If End Sub
4、取款界面截圖如下:
五)、查詢余額界面
1、功能:實(shí)現(xiàn)用戶查詢對(duì)應(yīng)賬戶的余額
2、查詢余額代碼如下:Private Sub Command17_Click()Command14.Visible = False Command15.Visible = False Command16.Visible = False Command17.Visible = False Command18.Visible = False Command19.Visible = False Label6.Visible = False Label7.Visible = False sql = ”select 余額 from 賬戶
where 銀行卡號(hào)= '“ & Ynum & ”'“ Adodc1.RecordSource = sql Adodc1.Refresh Label8.Caption = Adodc1.Recordset.Fields(”余額“)Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”銀行卡號(hào)“)= Ynum
Adodc2.Recordset(”事務(wù)類型“)= ”查詢余額“
Adodc2.Recordset(”時(shí)間“)= Now()
Adodc2.Recordset(”事務(wù)描述“)= ”查詢余額“
Adodc2.Recordset.Update
Adodc2.Refresh Label9.Visible = True Label8.Visible = True End Sub
3、查詢余額界面截圖如下:
六)、轉(zhuǎn)賬界面
1、功能:a、實(shí)現(xiàn)用戶轉(zhuǎn)賬
b、需2次確認(rèn)賬戶信息,若信息輸入不全,賬戶余額不足,2次輸入不一樣,均不可完成轉(zhuǎn)賬
c、用戶每轉(zhuǎn)一筆賬,均將在事務(wù)表中記錄轉(zhuǎn)賬金額和時(shí)間
2、轉(zhuǎn)賬代碼如下:Private Sub Command30_Click()If Not Text11.Text = ”“ And Not Text10.Text = ”“ And Not Text9.Text = ”“ Then If Text10.Text = Text9.Text Then Adodc1.Refresh If Adodc1.Recordset(”余額“)>= Val(Text11.Text)Then Adodc1.Refresh Adodc1.Recordset(”余額“)= Adodc1.Recordset(”余額“)Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2-Me.picLOAD.Height Me.picLOAD.Visible = True 'DoEvents '釋放控制權(quán)
Me.ListView1.ListItems.Clear Dim addLIST As ListItem Dim ss As String Dim sql As String ss = App.Path + ”datadata.mdb“ Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=gxl;Persist Security Info=False;Data Source=“ & ss Adodc1.CommandType = adCmdText sql = ”select * from ATM“ Adodc1.RecordSource = sql Adodc1.Refresh '連接數(shù)據(jù)庫(kù)
Do While Not Adodc1.Recordset.EOF Set addLIST = ListView1.ListItems.Add(, , Adodc1.Recordset!ATM機(jī)編號(hào), , i)addLIST.SubItems(1)= IIf(IsNull(Adodc1.Recordset.Fields(”狀態(tài)“).Value), Adodc1.Recordset.Fields(”狀態(tài)“).Value)addLIST.SubItems(2)= IIf(IsNull(Adodc1.Recordset.Fields(”余額“).Value), Adodc1.Recordset.Fields(”余額“).Value)Adodc1.Recordset.MoveNext Loop Me.picLOAD.Visible = False End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button.Index
Case Is = 2 '
ZhZCfrm.Show 1
Case Is = 3
' ZHZXfrm.Show 1
Case Is = 4
Call addLIST End Select End Sub
3、界面截圖:
”“, ”“,六)、單位信息界面
1、功能:顯示單位信息
2、代碼: Private Sub cmdBC_Click()'修改銀行信息 Dim s As String If Not Text1(0).Text = ”“ And Not Text1(1).Text = ”“ And Not Text1(2).Text = ”“ And Not Text1(3).Text = ”“ And Not Text1(4).Text = ”“ Then
s = ”update 銀行信息 set 銀行名稱='“ & Text1(0).Text & ”',銀行地址='“ & Text1(1).Text & ”',郵政編號(hào)='“ & Text1(2).Text & ”',負(fù)責(zé)人='“ & Text1(3).Text & ”', 聯(lián)系電話='“ & Text1(4).Text & ”'“
Adodc1.RecordSource = s
MsgBox(”修改成功“)
Adodc1.Recordset.Update
Else
MsgBox ”修改信息不全,請(qǐng)檢查!“
End If End Sub
Private Sub Form_Load()Dim ss As String Dim sql As String ss = App.Path + ”datadata.mdb“ Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=gxl;Persist Security Info=False;Data Source=“ & ss Adodc1.CommandType = adCmdText sql = ”select * from 銀行信息“ Adodc1.RecordSource = sql Adodc1.Refresh '連接數(shù)據(jù)庫(kù) End Sub
3、界面截圖:
七)、下面給出數(shù)據(jù)備份還原的代碼 Private Sub a14_Click()On Error GoTo ERR_line newname = App.Path & ”datadata.mdb“ datapath = App.Path & ”backup“ & Date & ” 備份卡.bak“ FileCopy newname, datapath MsgBox ”數(shù)據(jù)已備份到
“ & datapath, 64, ”提示“ Exit Sub ERR_line: MsgBox ”不能完成數(shù)據(jù)備份!“, 48, ”運(yùn)行錯(cuò)誤“ End Sub
Private Sub a15_Click()On Error GoTo ERR_line
Me.CommonDialog1.ShowOpen
snewname = Me.CommonDialog1.FileName
sdatapath = App.Path & ”datadata.mdb“
If snewname <> ”“ Then
If MsgBox(”還原后將覆蓋原有數(shù)據(jù),確定還原嗎?“, vbInformation + vbYesNo, ”提示“)= vbYes Then
FileCopy snewname, sdatapath
MsgBox ”數(shù)據(jù)已經(jīng)成功還原!請(qǐng)重新登陸 “, 48, ”提示“
Unload Me
Formload.Show
Else
Exit Sub End If
End If Exit Sub
ERR_line: MsgBox ”不能完成數(shù)據(jù)還原,請(qǐng)進(jìn)入系統(tǒng)后未做任何操作時(shí)進(jìn)行!“, 48, ”運(yùn)行錯(cuò)誤" End Sub
四、數(shù)據(jù)庫(kù)
本系統(tǒng)使用的是access數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)密碼為gxl。本系統(tǒng)共有5張表,分別為:ATM,事務(wù),系統(tǒng)用戶表,銀行信息,賬戶。
下面給出數(shù)據(jù)庫(kù)的相關(guān)截圖。
1、表圖:
2、ATM的設(shè)計(jì)視圖
3、事務(wù)的設(shè)計(jì)視圖
4、系統(tǒng)用戶表的設(shè)計(jì)視圖
5、銀行信息的設(shè)計(jì)視圖
6、賬戶的設(shè)計(jì)視圖
第四篇:Vb設(shè)計(jì)實(shí)驗(yàn)報(bào)告
Vb設(shè)計(jì)實(shí)驗(yàn)報(bào)告
一、設(shè)計(jì)內(nèi)容和目的
這次實(shí)驗(yàn)設(shè)計(jì),我做的是學(xué)生信息管理系統(tǒng),主要功能是提供學(xué)生信息保存和查詢功能。
主要分為個(gè)窗口,其具體功能如下:
1、登錄窗口:提供學(xué)生和管理員登錄。
2、信息管理窗口:主操作窗口,可以進(jìn)行重登陸、注銷、退出、用戶查詢、管理員管理、系統(tǒng)信息的操作。包括一個(gè)下拉菜單和工具欄。
3、用戶查詢窗口:可以查詢數(shù)據(jù)庫(kù)中保存的學(xué)生信息。
4、管理員管理窗口:只有管理員可以進(jìn)入,顯示數(shù)據(jù)庫(kù)中所有的學(xué)生信息,并且可以添加修改。
5、系統(tǒng)信息窗口:是系統(tǒng)的信息內(nèi)容。
另外,根據(jù)網(wǎng)上的代碼,我又制作了俄羅斯方塊小游戲和畫圖工具。
二、設(shè)計(jì)過(guò)程:
1、實(shí)驗(yàn)構(gòu)思:在系統(tǒng)設(shè)計(jì)之前,對(duì)實(shí)驗(yàn)內(nèi)容和結(jié)構(gòu)的構(gòu)思占據(jù)了相當(dāng)一部分時(shí)間。最終決定做一個(gè)“學(xué)生信息管理系統(tǒng)”,這樣比較貼近自身情況,也有比較多的內(nèi)容可以設(shè)計(jì)。
2、技術(shù)實(shí)現(xiàn):在制作過(guò)程中主要使用了vb2005和數(shù)據(jù)庫(kù)技術(shù)實(shí)現(xiàn)系統(tǒng)的設(shè)計(jì)、實(shí)現(xiàn)和運(yùn)行。Photoshop等技術(shù)使程序的界面看起來(lái)更加友好。
3、運(yùn)行調(diào)試:在系統(tǒng)制作中的運(yùn)行調(diào)試過(guò)程中,出現(xiàn)了很多問(wèn)題,比如各窗口之間的調(diào)用和訪問(wèn),如何退出,控件的背景設(shè)置、字體顏色設(shè)置等,都需要經(jīng)過(guò)一遍遍的調(diào)試發(fā)現(xiàn)、解決。
4、系統(tǒng)打包:在打包的時(shí)候,我按照老師給的方法一步步設(shè)置,可是由于粗心等原因,總是達(dá)不到滿意的效果,直到第三次才真正成功。
三、系統(tǒng)結(jié)構(gòu):
如一所述,系統(tǒng)分為5個(gè)模塊,各個(gè)模塊之間可以自由訪問(wèn)。
四、實(shí)驗(yàn)結(jié)果: 該系統(tǒng)能夠提供學(xué)生和管理員兩種類型的登錄,可以實(shí)現(xiàn)學(xué)生信息的查詢、管理員對(duì)信息的修改,等。
五、設(shè)計(jì)心得:
在設(shè)計(jì)過(guò)程中,遇到了許多困難,比如:數(shù)據(jù)庫(kù)無(wú)法連接、窗口無(wú)法正常訪問(wèn)、控件背景與窗體背景不協(xié)調(diào)等。后來(lái)通過(guò)查看課本和訪問(wèn)網(wǎng)絡(luò)將這些問(wèn)題解決了。
在這個(gè)過(guò)程中,我深深體會(huì)到大作業(yè)的用意:將所學(xué)理論知識(shí)用于實(shí)踐。正是因?yàn)檫@樣,許多理論上的知識(shí)才能真正得到理解。處理問(wèn)題的過(guò)程,也就是學(xué)習(xí)的過(guò)程。背課本何其簡(jiǎn)單,真正的能力卻是將課本運(yùn)用到實(shí)踐中去!
第五篇:VB順序設(shè)計(jì)
VB順序設(shè)計(jì)
教學(xué)目的:
1、熟悉結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)及其特點(diǎn)。
2、掌握VB中順序設(shè)計(jì)常用的語(yǔ)法規(guī)則。教學(xué)重點(diǎn):1、2、3、4、結(jié)構(gòu)化程序設(shè)計(jì)方法概念的理解。Print方法的應(yīng)用及格式特點(diǎn)。
VB中的賦值語(yǔ)句功能及特點(diǎn)。
VB中的inputbox()輸入函數(shù)及msgbox()輸出函數(shù)應(yīng)用。
課時(shí)安排:
理論教學(xué)安排6課時(shí),上機(jī)練習(xí)8課時(shí)
一、程序設(shè)計(jì)三大基本結(jié)構(gòu):
1、順序(按語(yǔ)句的書寫順序執(zhí)行)
2、分支
3、循環(huán)
二、賦值語(yǔ)句 格式:
[let] 變量名 = 表達(dá)式 功能:
計(jì)算表達(dá)式的值,并把結(jié)果送給“=”左邊的變量。
Let a1=3*4---------語(yǔ)句執(zhí)行后,變量a1的值為12 Let ab1=”你好”-------語(yǔ)句執(zhí)行后,變量ab1的值為字符串“你好” 語(yǔ)句說(shuō)明:
1、變量與表達(dá)式的數(shù)據(jù)類型必須一致。
2、“=”有方向性。需要?jiǎng)討B(tài)理解
Let a1=a1+1-------將a1的當(dāng)前值加1送給a1。語(yǔ)句執(zhí)行后,a1的值自動(dòng)累加1
3、VB中對(duì)象的屬性名等同于變量名。
Private Sub Command1_Click()Dim a As String, b As String Let a = Text1.Text Let b = Text2.Text Label1.Caption = a + b End Sub 上機(jī)練習(xí): P47-49 例1到例3 P78 上機(jī)調(diào)試題1
產(chǎn)生隨機(jī)數(shù)公式:
Int(n*rnd)+1
用來(lái)產(chǎn)生1到n之間的隨機(jī)整數(shù)
1)2)定義變量(n,x1,x2,x3)
取得n值(通過(guò)文本框送值給n)
n=val(text1.text)3)產(chǎn)生x1,x2,x3三個(gè)隨機(jī)數(shù) 4)x1,x2,x3分別送給指定的標(biāo)簽。
Dim n as integer,x1 as integer
Dim x2 as integer,x3 as integer
N=val(text1.text)
randomize X1=int(n*rnd+1): X2=int(n*rnd+1)
X3=int(n*rnd+1)
Label2.caption=x1
Label3.caption=x2
Label4.caption=x3
三、print方法
1、格式:
對(duì)象名.print [輸出項(xiàng)列表] 具體語(yǔ)句如下:
Form1.print 輸出項(xiàng)表
Picture1.print 輸出項(xiàng)表 例如:
Form1.Print “我的程序”, 23-------在窗體上顯示兩個(gè)數(shù)據(jù)項(xiàng)。Form1.Print “23+14=”, 23 + 14 Picture1.Print “我的圖片框”---------在圖片框上顯示一個(gè)數(shù)據(jù)項(xiàng)。Picture1.Print “23+14=”;23 + 14
2、功能:
在指定的對(duì)象上輸出結(jié)果。
注意:對(duì)象為窗體時(shí),對(duì)象名可以省缺。
3、輸出項(xiàng)表的格式
(1)逗號(hào)分隔符---------輸出項(xiàng)以標(biāo)準(zhǔn)格式輸出。(輸出項(xiàng)之間有固定的間隔)
Print 1 Print “1”
‘兩行的輸出有區(qū)別。上一行輸出數(shù)值1,前面有符號(hào)位。而下一行輸出字符1,頂格顯示。Print 1, 2
(2)分號(hào)分隔符---------輸出項(xiàng)以緊湊格式輸出。輸出多個(gè)字符時(shí),直接連接輸出。
輸出數(shù)值時(shí),產(chǎn)生一個(gè)分隔位,用來(lái)將數(shù)據(jù)隔開(kāi)。Print “1”;“2”;“3” Print 1;2;3 注意:print方法中,逗號(hào)與分號(hào)可以混用。Print “1”;“2”;“3”, 1;2;3 Print “1”;“2”;“3”, 1;2, 3(4)特殊的print語(yǔ)句
分隔符出現(xiàn)在print的末尾--------表示下一個(gè)print語(yǔ)句與本行的print在同一行顯示。Print “1”;A=2 Print “2”;“3”, Print 1;2;3
分隔符之間的數(shù)據(jù)項(xiàng)可以省缺。-------標(biāo)準(zhǔn)輸出時(shí)會(huì)產(chǎn)生更大的分隔空間。Print 1;;;2 Print 1;2
效果相同 Print 1, , 2 Print 1, 2
效果不同
空print語(yǔ)句---------產(chǎn)生換行或空行 Print 1,2, Print
‘功能為換行 Print 1,2,3 Print
‘功能為空行 Print 1;2;3(5)在print語(yǔ)句中使用定位函數(shù)
空格函數(shù)spc(n)-------在分號(hào)分隔符輸出項(xiàng)之間產(chǎn)生指定個(gè)數(shù)的空格。Print “中國(guó)”;”湖北”
print“中國(guó)”;spc(1);”湖北” print“中國(guó)”;spc(2);”湖北” print“中國(guó)”;spc(3);”湖北”
print“中國(guó)”;spc(4);”湖北”
列定位函數(shù)tab(n)-------在分號(hào)分隔符輸出項(xiàng)之間,指定隨后的輸出項(xiàng)的輸出位置。Print “中國(guó)”;”湖北” print“中國(guó)”;tab(10);”湖北” print“中國(guó)”;tab(12);”湖北”
print“中國(guó)”;tab(14);”湖北” print“中國(guó)”;tab(16);”湖北”
格式串輸出函數(shù)format(表達(dá)式,格式串)------常用于數(shù)值的輸出。上機(jī)練習(xí): P51-54 例3.4,3.5 P79 上機(jī)調(diào)試2 Private Sub Command1_Click()Dim a As String a = Text1.Text Text1.Text = Text2.Text Text2.Text = Text3.Text Text3.Text = a End Sub
Private Sub Command2_Click()Text4.Text = Text1.Text & Text2.Text & Text3.Text End Sub
四、對(duì)話框的使用
1、輸入對(duì)話框 格式:
變量名=inputbox(“提示字符串”,”標(biāo)題”,“默認(rèn)值”,輸入框的位置坐標(biāo))
Private Sub Form_Click()Dim x As String x = InputBox(“請(qǐng)輸入你的姓名”)Print “你的名字是” & x End Sub
Private Sub Form_Click()Dim x As String x = InputBox(“請(qǐng)輸入你的姓名”, “姓名輸入框”)Print “你的名字是” & x End Sub 注意:
1)字符串的分行顯示
Chr(13)---------回車
Chr(10)---------換行
Print “你的名字是” & chr(13)& chr(10)& x------print 語(yǔ)句將產(chǎn)生兩行輸出效果。2)inputbox()的值是字符串。轉(zhuǎn)換成數(shù)值使用val()函數(shù)。
2、輸出消息框 格式:
變量名=msgbox(“提示串”,“對(duì)話框類型”,“對(duì)話框標(biāo)題”)對(duì)話框類型如下:
x = MsgBox(“你的名字是” & x, 16, “姓名輸出框”)對(duì)話框類型值=按鈕值+圖標(biāo)類型值+默認(rèn)按鈕值 按鈕值:0,1,2,3,4,5 圖標(biāo)類型值:16,32,48,64 默認(rèn)按鈕值:0,256,512 注意: 1)2)例如:
MsgBox “你的名字是” & x, 49 + 256, “姓名輸出框” 上機(jī)練習(xí):
1、P69 例3.8
2、P80 上機(jī)調(diào)試題7(1)msgbox “在這里顯示提示信息”,4,“請(qǐng)確認(rèn)”
x= msgbox(“在這里顯示提示信息”,4,“請(qǐng)確認(rèn)”)
?兩種語(yǔ)句格式均可,前一種無(wú)返值,后一種返回一個(gè)數(shù)值送給x變量。
(2)(3)msgbox “在這里顯示+chr(13)+chr(10)+提示信息”,3,“請(qǐng)確認(rèn)” msgbox “在這里顯示+chr(13)+chr(10)+提示信息”,18,“請(qǐng)確認(rèn)” Msgbox()的返回值為一個(gè)數(shù)值(也可以是符號(hào)常量),代表了不同的按鈕。Msgbox可以有無(wú)返值格式。結(jié)構(gòu)如下: Msgbox “提示串”,”類型”,”標(biāo)題欄”
Private Sub Command1_Click()MsgBox “歡迎” + Text1.Text, 68, “消息框” End Sub 系統(tǒng)登錄界面設(shè)計(jì):
Private Sub Command1_Click()Dim a As Integer a = MsgBox(“歡迎” + Text1.Text, 49, “消息框”)If a = 1 Then Unload Me
‘用來(lái)卸載窗體,執(zhí)行完后窗體1消失.Form2.Show
?顯示窗體,執(zhí)行完后窗體2顯示.Else Text1.Text = “" Text2.Text = ”“ End If End Sub
小結(jié)順序程序設(shè)計(jì):
一、程序結(jié)構(gòu)語(yǔ)句
1、賦值語(yǔ)句
[let] 變量名=表達(dá)式
2、[let] 對(duì)象名.屬性=表達(dá)式 常用語(yǔ)句 1)end 2)rem(?)rem 這是我寫的程序 ‘這是我寫的程序
3、print方法
form1.print 輸出項(xiàng)表
picture1.print 輸出項(xiàng)表
重點(diǎn):輸出項(xiàng)表的格式
1)2)標(biāo)準(zhǔn)分隔“,” 緊湊分隔“;”
3)定位函數(shù)spc(n),tab(n)
3、對(duì)話框
1)輸入對(duì)話框
變量名=inputbox(“”,“”,“”,??)2)消息框
變量名=msgbox(“”,“”,“”,??)msgbox“”,“”,“”,??
二、控件對(duì)象
1、對(duì)象的公共屬性
Name,caption,enabled(可用),visible(可見(jiàn))
2、標(biāo)簽(label)
常用屬性:label1.caption
事件:?jiǎn)螕?,雙擊
3、按鈕(command)
常用屬性:
事件:?jiǎn)螕?/p>
4、文本框(text)
常用屬性:text1.text,passwordchar,??
事件:?jiǎn)螕?雙擊,change 上機(jī)練習(xí): P79、上機(jī)練習(xí)5、6 上機(jī)練習(xí)5
Private Sub Cmd1_Click()Lab1.Visible = True Lab1.Caption = ”您已下達(dá)顯示命令!“ End Sub
Private Sub Form_Click()Cmd1.Visible = True End Sub
上機(jī)練習(xí)6 課本37頁(yè)(字符串函數(shù))
1、求字符串長(zhǎng)度len()-----求字符串的長(zhǎng)度。
2、取子串函數(shù)
Left(字符串,n)-----從字符串左邊開(kāi)始取n個(gè)字符組成新字符串。
right(字符串,n)-----從字符串右邊開(kāi)始取n個(gè)字符組成新字符串。
mid(字符串,p,n)-----從字符串左邊開(kāi)始數(shù),第P個(gè)位置取n個(gè)字符組成新字符串。N可以省缺,表示取到字符串的末尾。
3、兩個(gè)字符相關(guān)的轉(zhuǎn)換函數(shù)
Chr(x)------求數(shù)值x對(duì)應(yīng)的字符。
Asc(x)------求X字符對(duì)應(yīng)的ASCII碼值 Private Sub Form_KeyPress(KeyAscii As Integer)‘窗體的按鍵事件。用戶按鍵盤激活事件。
Print ”輸入字符為:“;Chr(KeyAscii), ”ASCII碼為:";KeyAscii End Sub Private Sub Form_KeyPress(KeyAscii As Integer)‘將輸入的字符顯示在文本框內(nèi)
Text1.Text = Text1.Text + Chr(KeyAscii)‘將文本框中已有的內(nèi)容與本次輸入的字符連接作為文本框的新內(nèi)容。End Sub 上機(jī)練習(xí)3 四位數(shù)(1000-9999)Int((9999-1000+1)*rnd+1000)產(chǎn)生一個(gè)四位隨機(jī)整數(shù)。數(shù)與字符串轉(zhuǎn)換函數(shù):
Val(x)--------將X數(shù)據(jù)串變成數(shù)值。
Str(x)--------將數(shù)值x變成對(duì)應(yīng)的數(shù)字串。
Trim(Str(x))-------先將x變成數(shù)字串再去掉兩邊的空格。Trim(x)用來(lái)去掉x兩邊的空格。假設(shè)s=3456: Val(right(s,1)+mid(s,3,1)+mid(s,2,1)+left(s,1))完成對(duì)s倒序過(guò)程。作業(yè):
1、簡(jiǎn)述VB中常用的標(biāo)簽、按鈕及文本框控件的常用屬性及事件。
2、總結(jié)print方法中輸出項(xiàng)列表的格式。
3、P78三填空題(1)--(6)