在VB6.0中實現動態統計報表 (轉)
在VB6.0中實現動態統計報表 (轉)[@more@]在利用VB開發MIS的過程中,經常需要製作動態統計報表。本文就如何實現動態資料來源下的分組交叉統計報表進行闡述,並結合例項給出指導。
在.0的資料環境設計器中,我們可以利用“新增命令”一項來連線報表所需的資料來源,同時利用“新增命令”屬性中的分組與合計功能設計分組交叉統計報表的資料來源,至此我們可以設計簡單的資料存在於單一表靜態資料來源下分組交叉報表,對於資料存在多表的複雜的動態資料來源下的分組交叉報表來說,仍實現不了,實現該功能的關鍵在於構造一個符合動態資料來源要求的中間表。下面以一管理系統中工程成本統計報表的例項來說明如何實現動態資料來源下的分組交叉統計報表。
一、報表要求與分析
該報表要求列出在指定的時間段內實施的各項工程所耗器材明細、數量、費用,並且計算各項工程的成本,最終計算所有工程的累計成本。
需求分析後可知該報表是個典型的動態資料來源下分組統計報表,分組項為工程名稱,要求對每個分組進行子彙總和對所有分組進行總彙總。由於在該系統中的出庫單和出庫單明細分別存放在不同的表中,因此必須根據報表的要求預先構造一個成本統計中間表,命名為EquipMentCost。相關表結構如圖1。
透過對錶OutBill和OutBillDetail的分析,發現兩者透過關鍵字OutBill 相聯,下面透過語句生成中間表EquipmentCost,語句如下:
Insert into EquipmentCost
(Project,Name,Standard,Type,Num,Cost)
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
date1 和 date2 變數用來指定時間,注意插入前要先清空該中間表的所有資料。
二、利用資料環境設計器生成工程成本報表的初始模板
開啟一個資料環境設計器,在其屬性表單中設定其名稱屬性為EnvCatv,並新增一個連線到當前庫Catv,連線名稱為CatvConn。在當前庫連線下單擊右鍵,選擇“新增命令”選項,建立一個命令,命名為CmdCost,在該命令的屬性頁的“通用”選項頁上設定SQL語句如下:
Select ? from EquipmentCost
單擊“應用”按鈕察看效果。
隨後對該命令進行分組,右鍵單擊該命令,選擇“屬性”選項,在屬性頁的“分組”選項頁中,將Project(工程名稱)欄位設定為分組欄位,分組名稱為GroupCost,單擊“應用”按鈕觀看效果。
接著對該命令進行子彙總,右鍵單擊該命令,選擇“屬性”頁的“彙總”選項頁,將Num(器材數量)、Cost(器材成本)設定為子彙總欄位,分別命名為“合計1”、“合計2”,彙總名稱為GrantTotal,該名稱為總彙總所共用。在中顯示報表前,必須對該名稱對應的記錄集RsGrantTotal進行重新整理,否則資料包表不能反映統計中間表的最新內容。單擊“應用”按鈕觀看效果。
最後對該命令進行總彙總,右鍵單擊該命令,選擇“屬性”頁的“彙總”選項頁,將“合計1”、“合計2”設定為總彙總欄位,分別命名為“總計1”、“總計2”,單擊“應用”按鈕觀看效果。
按照上面的步驟,我們在當前連線CatvConn下建立了一個包含彙總的分組命令,接著建立一個資料包表設計器命名為RptCost,將該分組子命令拖到資料包表的“細節”段內,釋放後,調節各個欄位的大小和位置,其中,子彙總欄位和總彙總欄位還應該分別另建分組節,總彙總欄位所處的節應位於最上層。
三、在程式中填充統計中間表,資料包表並顯示
設計一個列印模組如下:
Public Sub Print_EquipMentCost(Byval Date1 as Date, Byval Date2 as Date)
'清空虛擬表
Dim SSQL as string
Dim Cmd As New ADO.Command
SSql = "Delete From EquipmentCost"
Cmd.ActiveConnection = gConn
'資料庫連線變數,讀者可以建立自己的資料庫連線變數
Cmd.CommandType = adCmdText
Cmd.CommandText = SSql
Cmd.Execute
'將統計明細新增到虛擬表中
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
'重新整理資料包表,使其顯示最新查詢記錄
Set RptCost.Data = EnvCatv
'資料環境名稱
EnvCatv.rsGrandTotal.Requery 'rsGrantTotal 為分組子命令記錄集名稱
'顯示資料包表
RptCost.Show
End Sub
本程式在VB6.0、MS-下執行成功。
出庫單表名為OutBill,結構如下:
出庫單明細表名為OutBillDetail,結構如下:
成本統計中間表名為EquipMentCost,結構如下:
在.0的資料環境設計器中,我們可以利用“新增命令”一項來連線報表所需的資料來源,同時利用“新增命令”屬性中的分組與合計功能設計分組交叉統計報表的資料來源,至此我們可以設計簡單的資料存在於單一表靜態資料來源下分組交叉報表,對於資料存在多表的複雜的動態資料來源下的分組交叉報表來說,仍實現不了,實現該功能的關鍵在於構造一個符合動態資料來源要求的中間表。下面以一管理系統中工程成本統計報表的例項來說明如何實現動態資料來源下的分組交叉統計報表。
一、報表要求與分析
該報表要求列出在指定的時間段內實施的各項工程所耗器材明細、數量、費用,並且計算各項工程的成本,最終計算所有工程的累計成本。
需求分析後可知該報表是個典型的動態資料來源下分組統計報表,分組項為工程名稱,要求對每個分組進行子彙總和對所有分組進行總彙總。由於在該系統中的出庫單和出庫單明細分別存放在不同的表中,因此必須根據報表的要求預先構造一個成本統計中間表,命名為EquipMentCost。相關表結構如圖1。
透過對錶OutBill和OutBillDetail的分析,發現兩者透過關鍵字OutBill 相聯,下面透過語句生成中間表EquipmentCost,語句如下:
Insert into EquipmentCost
(Project,Name,Standard,Type,Num,Cost)
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
date1 和 date2 變數用來指定時間,注意插入前要先清空該中間表的所有資料。
二、利用資料環境設計器生成工程成本報表的初始模板
開啟一個資料環境設計器,在其屬性表單中設定其名稱屬性為EnvCatv,並新增一個連線到當前庫Catv,連線名稱為CatvConn。在當前庫連線下單擊右鍵,選擇“新增命令”選項,建立一個命令,命名為CmdCost,在該命令的屬性頁的“通用”選項頁上設定SQL語句如下:
Select ? from EquipmentCost
單擊“應用”按鈕察看效果。
隨後對該命令進行分組,右鍵單擊該命令,選擇“屬性”選項,在屬性頁的“分組”選項頁中,將Project(工程名稱)欄位設定為分組欄位,分組名稱為GroupCost,單擊“應用”按鈕觀看效果。
接著對該命令進行子彙總,右鍵單擊該命令,選擇“屬性”頁的“彙總”選項頁,將Num(器材數量)、Cost(器材成本)設定為子彙總欄位,分別命名為“合計1”、“合計2”,彙總名稱為GrantTotal,該名稱為總彙總所共用。在中顯示報表前,必須對該名稱對應的記錄集RsGrantTotal進行重新整理,否則資料包表不能反映統計中間表的最新內容。單擊“應用”按鈕觀看效果。
最後對該命令進行總彙總,右鍵單擊該命令,選擇“屬性”頁的“彙總”選項頁,將“合計1”、“合計2”設定為總彙總欄位,分別命名為“總計1”、“總計2”,單擊“應用”按鈕觀看效果。
按照上面的步驟,我們在當前連線CatvConn下建立了一個包含彙總的分組命令,接著建立一個資料包表設計器命名為RptCost,將該分組子命令拖到資料包表的“細節”段內,釋放後,調節各個欄位的大小和位置,其中,子彙總欄位和總彙總欄位還應該分別另建分組節,總彙總欄位所處的節應位於最上層。
三、在程式中填充統計中間表,資料包表並顯示
設計一個列印模組如下:
Public Sub Print_EquipMentCost(Byval Date1 as Date, Byval Date2 as Date)
'清空虛擬表
Dim SSQL as string
Dim Cmd As New ADO.Command
SSql = "Delete From EquipmentCost"
Cmd.ActiveConnection = gConn
'資料庫連線變數,讀者可以建立自己的資料庫連線變數
Cmd.CommandType = adCmdText
Cmd.CommandText = SSql
Cmd.Execute
'將統計明細新增到虛擬表中
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
'重新整理資料包表,使其顯示最新查詢記錄
Set RptCost.Data = EnvCatv
'資料環境名稱
EnvCatv.rsGrandTotal.Requery 'rsGrantTotal 為分組子命令記錄集名稱
'顯示資料包表
RptCost.Show
End Sub
本程式在VB6.0、MS-下執行成功。
欄位名
欄位含義
型別
長度
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-997077/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 後設資料管理—動態表單設計器在crudapi系統中完整實現API
- 【react】實現動態表單中巢狀動態表單React巢狀
- 動態切換 web 報表中的統計圖型別Web型別
- 在報表中錄入資料時如何實現行列轉換
- 複雜報表設計之動態報表
- 怎樣實現動態列報表,也就是列數不固定的報表?
- ACCESS 在資料表中實現簡單計算
- 報表中怎樣實現滾動的公告效果
- 在Java中利用動態代理實現資料庫連線與事務的自動管理【轉】Java資料庫
- 大屏報表中如何實現多圖表間的聯動?
- 報表中怎麼新增動態文字水印
- 在純JaveScript中實現報表匯出:從“PDF”到“JPG”
- 實現動態表單的一種思路
- SQL 如何實現動態的行列轉置SQL
- 動態執行緒池在轉轉平臺的實踐執行緒
- Python 實現自動化 Excel 報表PythonExcel
- 報表合計需求的實現方法
- BIRT 統計圖中怎麼根據引數實現 X 軸動態分組
- 跟我一起學習和開發動態表單系統-動態表單系統的技術實現與優勢(2)
- 在SSRS 2008實現匿名訪問報表PD
- React Native 中實現動態匯入React Native
- 在 React Native 中原生實現動態匯入React Native
- 實現報表資料預先計算
- 貝葉斯統計和因果推斷在轉轉估價中的落地實踐
- 在spring boot中訊息推送系統設計與實現Spring Boot
- 手術麻醉資訊管理系統原始碼,全面實時監控手術動態,提供多種統計分析報表原始碼
- Spring MVC 中檢視的實現原理,在Spring MVC 中實現重定向和轉發,以及訪問靜態資源SpringMVC
- Java中動態規則的實現方式Java
- 皕傑報表實現下拉框聯動
- 實現報表滾動到底部翻頁效果
- 統計報表 -- sql統計語句SQL
- 淺談AB實驗及其在轉轉B2B報價系統中的應用
- SAP ABAP 動態內表實現 ALV橫向按月份動態顯示資料
- Spring+quartz實現動態化定時任務 (轉)Springquartz
- 潤乾報表實現中間資料外接
- 在報表中可以如何使用 ECharts 做圖形展現?Echarts
- 動態表單後端設計後端
- 動態表單儲存設計
- 快捷簡易統計圖表模型設計與實現模型