程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 在VB6.0中實現動態統計報表

在VB6.0中實現動態統計報表

編輯:VB綜合教程
在利用VB開發MIS系統的過程中,經常需要制作動態統計報表。本文就如何實現動態數據源下的分組交叉統計報表進行闡述,並結合實例給出編程指導。
  
  在VB6.0的數據環境設計器中,我們可以利用“添加命令”一項來連接報表所需的數據源,同時利用“添加命令”屬性中的分組與合計功能設計分組交叉統計報表的數據源,至此我們可以設計簡單的數據存在於單一表靜態數據源下分組交叉報表,對於數據存在多表的復雜的動態數據源下的分組交叉報表來說,仍實現不了,實現該功能的關鍵在於構造一個符合動態數據源要求的中間表。下面以一管理系統中工程成本統計報表的實例來說明如何實現動態數據源下的分組交叉統計報表。
  
  一、報表要求與分析
  該報表要求列出在指定的時間段內實施的各項工程所耗器材明細、數量、費用,並且計算各項工程的成本,最終計算所有工程的累計成本。
  
  需求分析後可知該報表是個典型的動態數據源下分組統計報表,分組項為工程名稱,要求對每個分組進行子匯總和對所有分組進行總匯總。由於在該系統中的出庫單和出庫單明細分別存放在不同的表中,因此必須根據報表的要求預先構造一個成本統計中間表,命名為EquipMentCost。相關表結構如圖1。
  
  通過對表OutBill和OutBillDetail的分析,發現兩者通過關鍵字OutBill相聯,下面通過SQL語句生成中間表EquipmentCost,語句如下:
  
  InsertintoEquipmentCost
  
  (Project,Name,Standard,Type,Num,Cost)
  
  selecta.projectas'Project',b.nameas'Name',b.standardas'Standard',b.typeas'Type',b.numas'Num',b.numb.priceas'Cost'fromOutbillaleftjoinOutbillDetailbon(a.outbill=b.outbill)
  
  wherea.OutDate>=date1anda.OutDate<=date2
  
  date1和date2變量用來指定時間,注意插入前要先清空該中間表的所有數據。
  
  二、利用數據環境設計器生成工程成本報表的初始模板
  打開一個數據環境設計器,在其屬性表單中設置其名稱屬性為EnvCatv,並添加一個數據庫連接到當前庫Catv,連接名稱為CatvConn。在當前庫連接下單擊右鍵,選擇“添加命令”選項,創建一個命令,命名為CmdCost,在該命令的屬性頁的“通用”選項頁上設置SQL語句如下:
  
  SelectfromEquipmentCost
  
  單擊“應用”按鈕察看效果。
  
  隨後對該命令進行分組,右鍵單擊該命令,選擇“屬性”選項,在屬性頁的“分組”選項頁中,將Project(工程名稱)字段設置為分組字段,分組名稱為GroupCost,單擊“應用”按鈕觀看效果。
  
  接著對該命令進行子匯總,右鍵單擊該命令,選擇“屬性”頁的“匯總”選項頁,將Num(器材數量)、Cost(器材成本)設置為子匯總字段,分別命名為“合計1”、“合計2”,匯總名稱為GrantTotal,該名稱為總匯總所共用。在程序中顯示報表前,必須對該名稱對應的記錄集RsGrantTotal進行刷新,否則數據報表不能反映統計中間表的最新內容。單擊“應用”按鈕觀看效果。
  
  最後對該命令進行總匯總,右鍵單擊該命令,選擇“屬性”頁的“匯總”選項頁,將“合計1”、“合計2”設置為總匯總字段,分別命名為“總計1”、“總計2”,單擊“應用”按鈕觀看效果。
  
  按照上面的步驟,我們在當前連接CatvConn下建立了一個包含匯總的分組命令,接著建立一個數據報表設計器命名為RptCost,將該分組子命令拖到數據報表的“細節”段內,釋放後,調節各個字段的大小和位置,其中,子匯總字段和總匯總字段還應該分別另建分組節,總匯總字段所處的節應位於最上層。
  
  三、在程序中填充統計中間表,更新數據報表並顯示
  設計一個打印模塊如下:
  
  PublicSubPrint_EquipMentCost(ByvalDate1asDate,ByvalDate2asDate)
  
  '清空虛擬表
  
  DimSSQLasstring  
  
  DimCmdAsNewADODB.Command
  
  SSql="DeleteFromEquipmentCost"
  
  Cmd.ActiveConnection=gConn  
  
  '數據庫連接變量,讀者可以建立自己的數據庫連接變量
  
  Cmd.CommandType=adCmdText
  
  Cmd.CommandText=SSql
  
  Cmd.Execute
  
  '將統計明細添加到虛擬表中
  
  ssql="InsertintoEquipmentCost"&&"(Project,Name,Standard,Type,Num,Cost)"&&"selecta.projectas'Project',b.nameas'Name',"&&"b.standardas'Standard',b.typeas'Type',"&&"b.numas'Num',b.num*b.priceas'Cost'"&&"fromOutbillaleftjoinOutbillDetailbon(a.outbill=b.outbill)"&&"wherea.OutDate>="&&Date1&&"anda.OutDate<="&&Date2
  
  Cmd.ActiveConnection=gConn
  
  Cmd.CommandType=adCmdText
  
  Cmd.CommandText=SSql
  
  Cmd.Execute
  
  '刷新數據報表,使其顯示最新查詢記錄
  
  SetRptCost.DataSource=EnvCatv
  
  '數據環境名稱
  
  EnvCatv.rsGrandTotal.Requery  'rsGrantTotal為分組子命令記錄集名稱
  
  '顯示數據報表
  
  RptCost.Show
  
  EndSub
  
  本程序在VB6.0、MS-SQLServer下運行成功。
  
  出庫單表名為OutBill,結構如下:字段名
  字段含義
  類型
  長度
  
  OutBill
  出庫單號
  Varchar
  10
  
  OutDate
  出庫日期
  SmallDate
  
  LLMan
  領料人
  Varchar
  12
  
  DepartMent
  部門
  Varchar
  12
  
  Operator
  經手人
  VarChar
  12
  
  Project
  對應工程
  VarChar
  50
  
  出庫單明細表名為OutBillDetail,結構如下:字段名
  字段含義
  類型
  長度
  
  OutBill
  出庫單號
  Varchar
  10
  
  EmName
  器材名稱
  Varchar
  12
  
  EmStandard
  器材規格
  Varchar
  12
  
  EmType
  器材型號
  Varchar
  12
  
  Amount
  數量
  Int
  
  Price
  單價
  smallmoney

成本統計中間表名為EquipMentCost,結構如下:字段名
  字段含義
  類型
  長度
  
  Project
  工程名稱
  Varchar
  50
  
  Name
  器材名稱
  Varchar
  12
  
  Standard
  器材規格
  Varchar
  12
  
  Type
  器材型號
  Varchar
  12
  
  Num
  器材用量
  Int 
  
  Cost
  器材成本
  smallmoney

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved