在VB6.0中完成動態(tài)統(tǒng)計報表
發(fā)表時間:2023-08-03 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在利用VB開發(fā)MIS系統(tǒng)的過程中,經(jīng)常需要制作動態(tài)統(tǒng)計報表。本文就如何實(shí)現(xiàn)動態(tài)數(shù)據(jù)源下的分組交叉統(tǒng)計報表進(jìn)行闡述,并結(jié)合實(shí)例給出編程指導(dǎo)。 在VB6.0的數(shù)據(jù)環(huán)境設(shè)計器中,我們可以利用“添加命令...
在利用VB開發(fā)MIS系統(tǒng)的過程中,經(jīng)常需要制作動態(tài)統(tǒng)計報表。本文就如何實(shí)現(xiàn)動態(tài)數(shù)據(jù)源下的分組交叉統(tǒng)計報表進(jìn)行闡述,并結(jié)合實(shí)例給出編程指導(dǎo)。
在VB6.0的數(shù)據(jù)環(huán)境設(shè)計器中,我們可以利用“添加命令”一項(xiàng)來連接報表所需的數(shù)據(jù)源,同時利用“添加命令”屬性中的分組與合計功能設(shè)計分組交叉統(tǒng)計報表的數(shù)據(jù)源,至此我們可以設(shè)計簡單的數(shù)據(jù)存在于單一表靜態(tài)數(shù)據(jù)源下分組交叉報表,對于數(shù)據(jù)存在多表的復(fù)雜的動態(tài)數(shù)據(jù)源下的分組交叉報表來說,仍實(shí)現(xiàn)不了,實(shí)現(xiàn)該功能的關(guān)鍵在于構(gòu)造一個符合動態(tài)數(shù)據(jù)源要求的中間表。下面以一管理系統(tǒng)中工程成本統(tǒng)計報表的實(shí)例來說明如何實(shí)現(xiàn)動態(tài)數(shù)據(jù)源下的分組交叉統(tǒng)計報表。
一、報表要求與分析
該報表要求列出在指定的時間段內(nèi)實(shí)施的各項(xiàng)工程所耗器材明細(xì)、數(shù)量、費(fèi)用,并且計算各項(xiàng)工程的成本,最終計算所有工程的累計成本。
需求分析后可知該報表是個典型的動態(tài)數(shù)據(jù)源下分組統(tǒng)計報表,分組項(xiàng)為工程名稱,要求對每個分組進(jìn)行子匯總和對所有分組進(jìn)行總匯總。由于在該系統(tǒng)中的出庫單和出庫單明細(xì)分別存放在不同的表中,因此必須根據(jù)報表的要求預(yù)先構(gòu)造一個成本統(tǒng)計中間表,命名為EquipMentCost。相關(guān)表結(jié)構(gòu)如圖1。
通過對表OutBill和OutBillDetail的分析,發(fā)現(xiàn)兩者通過關(guān)鍵字OutBill 相聯(lián),下面通過SQL語句生成中間表EquipmentCost,語句如下:
Insert into EquipmentCost
(Project,Name,Standard,Type,Num,Cost)
select a.project as 'Project', b.name as 'Name',b.standard as 'Standard', b.type as 'Type',b.num as 'Num', b.numb.price as 'Cost' from Outbill a left join OutbillDetail b on (a.outbill=b.outbill)
where a.OutDate>=date1 and a.OutDate<=date2
date1 和 date2 變量用來指定時間,注意插入前要先清空該中間表的所有數(shù)據(jù)。
二、利用數(shù)據(jù)環(huán)境設(shè)計器生成工程成本報表的初始模板
打開一個數(shù)據(jù)環(huán)境設(shè)計器,在其屬性表單中設(shè)置其名稱屬性為EnvCatv,并添加一個數(shù)據(jù)庫連接到當(dāng)前庫Catv,連接名稱為CatvConn。在當(dāng)前庫連接下單擊右鍵,選擇“添加命令”選項(xiàng),創(chuàng)建一個命令,命名為CmdCost,在該命令的屬性頁的“通用”選項(xiàng)頁上設(shè)置SQL語句如下:
Select from EquipmentCost
單擊“應(yīng)用”按鈕察看效果。
隨后對該命令進(jìn)行分組,右鍵單擊該命令,選擇“屬性”選項(xiàng),在屬性頁的“分組”選項(xiàng)頁中,將Project(工程名稱)字段設(shè)置為分組字段,分組名稱為GroupCost,單擊“應(yīng)用”按鈕觀看效果。
接著對該命令進(jìn)行子匯總,右鍵單擊該命令,選擇“屬性”頁的“匯總”選項(xiàng)頁,將Num(器材數(shù)量)、Cost(器材成本)設(shè)置為子匯總字段,分別命名為“合計1”、“合計2”,匯總名稱為GrantTotal,該名稱為總匯總所共用。在程序中顯示報表前,必須對該名稱對應(yīng)的記錄集RsGrantTotal進(jìn)行刷新,否則數(shù)據(jù)報表不能反映統(tǒng)計中間表的最新內(nèi)容。單擊“應(yīng)用”按鈕觀看效果。
最后對該命令進(jìn)行總匯總,右鍵單擊該命令,選擇“屬性”頁的“匯總”選項(xiàng)頁,將“合計1”、“合計2”設(shè)置為總匯總字段,分別命名為“總計1”、“總計2”,單擊“應(yīng)用”按鈕觀看效果。
按照上面的步驟,我們在當(dāng)前連接CatvConn下建立了一個包含匯總的分組命令,接著建立一個數(shù)據(jù)報表設(shè)計器命名為RptCost,將該分組子命令拖到數(shù)據(jù)報表的“細(xì)節(jié)”段內(nèi),釋放后,調(diào)節(jié)各個字段的大小和位置,其中,子匯總字段和總匯總字段還應(yīng)該分別另建分組節(jié),總匯總字段所處的節(jié)應(yīng)位于最上層。
三、在程序中填充統(tǒng)計中間表,更新數(shù)據(jù)報表并顯示
設(shè)計一個打印模塊如下:
Public Sub Print_EquipMentCost(Byval Date1 as Date, Byval Date2 as Date)
'清空虛擬表
Dim SSQL as string
Dim Cmd As New ADODB.Command
SSql = "Delete From EquipmentCost"
Cmd.ActiveConnection = gConn
'數(shù)據(jù)庫連接變量,讀者可以建立自己的數(shù)據(jù)庫連接變量
Cmd.CommandType = adCmdText
Cmd.CommandText = SSql
Cmd.Execute
'將統(tǒng)計明細(xì)添加到虛擬表中
ssql="Insert into EquipmentCost"&&" (Project,Name,Standard,Type,Num,Cost)"&&" select a.project as 'Project',b.name as 'Name',"&&"b.standard as 'Standard', b.type as 'Type',"&&"b.num as 'Num',b.num*b.price as 'Cost'"&&"from Outbill a left join OutbillDetail b on(a.outbill=b.outbill)"&&" where a.OutDate>=" && Date1 && " and a.OutDate<=" && Date2
Cmd.ActiveConnection = gConn
Cmd.CommandType = adCmdText
Cmd.CommandText = SSql
Cmd.Execute
'刷新數(shù)據(jù)報表,使其顯示最新查詢記錄
Set RptCost.DataSource = EnvCatv
'數(shù)據(jù)環(huán)境名稱
EnvCatv.rsGrandTotal.Requery 'rsGrantTotal 為分組子命令記錄集名稱
'顯示數(shù)據(jù)報表
RptCost.Show
End Sub
本程序在VB6.0、MS-SQL Server下運(yùn)行成功。
出庫單表名為OutBill,結(jié)構(gòu)如下: 字段名
字段含義
類型
長度
OutBill
出庫單號
Varchar
10
OutDate
出庫日期
SmallDate
LLMan
領(lǐng)料人
Varchar
12
DepartMent
部門
Varchar
12
Operator
經(jīng)手人
VarChar
12
Project
對應(yīng)工程
VarChar
50
出庫單明細(xì)表名為OutBillDetail,結(jié)構(gòu)如下: 字段名
字段含義
類型
長度
OutBill
出庫單號
Varchar
10
EmName
器材名稱
Varchar
12
EmStandard
器材規(guī)格
Varchar
12
EmType
器材型號
Varchar
12
Amount
數(shù)量
Int
Price
單價
smallmoney
成本統(tǒng)計中間表名為EquipMentCost,結(jié)構(gòu)如下: 字段名
字段含義
類型
長度
Project
工程名稱
Varchar
50
Name
器材名稱
Varchar
12
Standard
器材規(guī)格
Varchar
12
Type
器材型號
Varchar
12
Num
器材用量
Int
Cost
器材成本
smallmoney