在做机房收费系统中学习到使用报表,首先得问题是报表是什么?报表有什么作用?
报表:是企业管理的基本措施和途径,是企业的基本业务要求,报表可以帮助企业访问、格式化数据,并把数据信息以可靠和安全的方式呈现给使用者。深入洞察企业运营状况,是企业发展的强大驱动力。
报表在未来的公司中发挥着越来越重要的作用,做机房收费系统首次接触到报表的制作,里面包含了报表的基本原理与内容,自己下载下来报表生成器之后先先试一番,感觉它虽然制作简单但是功能很强大、很好玩。在vb、报表、数据库三者相连的学习中重要知识点如下:
报表在vb中的声明
在vb中需要声明(周结账单为例):
Option Explicit
Private WithEvents objWeekliyBill As grproLibCtl.GridppReport '声明objWeekliyBill对象
Withevents是什么意思呢?什么声明呢?
如下:Dim Withevents 对象变量 As 类名
这种用法是加载该类的事件,Withevents 之后就能在代码编辑窗看到该类的事件了(如果有的话)。
因为类不像控件,双击控件就可以进入事件编辑。
使用 WithEvents变量时,应该注意下面这些限制条件:
1.WithEvents变量不能是派生对象变量。也就是说,不能把它声明为AsObject—当声明该变量时必须指定类名。
2.不能把 WithEvents变量声明为AsNew。必须明确地创建事件源对象,并将它赋给WithEvents变量。
如:
Private Sub Form_Load()
dtpBeginDate.Value = Date
dtpEndDate.Value = Date
Set objWeekliyBill = New grproLibCtl.GridppReport '创建事件源事件
3.不能在标准模块中声明 WithEvents 变量。只能在类模块、窗体模块以及其它定义类的模块中声明。
不能创建WithEvents变量数组。
显示选定时间
在机房收费系统中有个周结账单中需要显示选定时间,如何实现的呢?
在报表主对象插入参数,右击--插入-参数,如有下方图:
,
在模板中插入综合文字框如图:
需要在vb中写入的程序:
Private Sub Form_Load()
dtpBeginDate.Value = Date
dtpEndDate.Value = Date
Set objWeekliyBill = New grproLibCtl.GridppReport '创建事件源事件
objWeekliyBill.LoadFromFile (App.Path & "\weekliybill.grf")
objWeekliyBill.DetailGrid.Recordset.ConnectionString = "FileDSN=room_charge_new.dsn;uid=sa;pwd=123456"
grdWeekliyBill.Report = objWeekliyBill
grdWeekliyBill.Start
objWeekliyBill.ParameterByName("BeginDate").Value = Format(dtpBeginDate.Value,"yyyy-mm-dd") '显示开始时间
objWeekliyBill.ParameterByName("EndDate").Value = Format(dtpEndDate.Value,"yyyy-mm-dd") '显示结束时间
End Sub
最终显示的结果
报表刷新
'报表的刷新
Private Sub cmdRefresh_Click()
Dim strsql As String
Dim strMsg As String
Dim objRsWeekliyBill As ADODB.Recordset
Dim objRsDaliyBill As ADODB.Recordset
If dtpBeginDate.Value > dtpEndDate.Value Then '条件限制
MsgBox "终止日期不能小于起始日期!",vbOKOnly + vbExclamation,"警告"
Exit Sub
End If
'日期的选定
strsql = "select * from CheckDay_Info where checkdate>='" & dtpBeginDate.Value & "'" & " and checkdate<='" & dtpEndDate.Value & "'"
Set objRsDaliyBill = Executesql(strsql,strMsg)
strsql = "select * from CheckWeek_Info"
Set objRsWeekliyBill = Executesql(strsql,strMsg)
Do While objRsWeekliyBill.EOF = False
objRsWeekliyBill.Delete
objRsWeekliyBill.MoveNext
Loop
'更新到日结表中
Do While objRsDaliyBill.EOF = False '判断是否有数据
With objRsWeekliyBill
.AddNew
.Fields(0) = objRsDaliyBill.Fields(0)
.Fields(1) = objRsDaliyBill.Fields(1)
.Fields(2) = objRsDaliyBill.Fields(2)
.Fields(3) = objRsDaliyBill.Fields(3)
.Fields(4) = objRsDaliyBill.Fields(4)
.Fields(5) = objRsDaliyBill.Fields(5)
.Update
objRsDaliyBill.MoveNext
End With
Loop
grdWeekliyBill.Refresh '刷新
objWeekliyBill.ParameterByName("BeginDate").Value = dtpBeginDate.Value
objWeekliyBill.ParameterByName("EndDate").Value = dtpEndDate.Value
End Sub
打印报表
Private Sub cmdPrint_Click()
objWeekliyBill.[Print] (True)
End Sub
打印预览
Private Sub cmdPreView_Click()
objWeekliyBill.PrintPreview (True)
End Sub
学习是个不断重复、积累、发掘的过程,这个过程可能短时间看不到明显的效果,但当我们暮然回首时会发现自己成长很多、收获很多,加油!