我们要用一个软件做报表的模板、然后在VB里面添加部件、代码调用模板,详细步骤如下。
一、下载安装
首先做报表要下载安装Grid++Report 4.5 报表设计器
点击下载(内含破解补丁)
二、制作模板
1、打开软件——插入——页眉、明细网格、页脚、如图
2。制作页眉
静态框:好像Label,能写入文字并显示
综合文字框:可以写入函数、变量等、跟文字结合并显示、在这里我们用作显示日期
上图右下角[#date3#][#time#]制作是自定义了date3跟time这两个变量、并且在VB代码中付给他俩当前的日期与时间、做法如下。
(1)新建参数
这里叫做参数、其实也是数据的容器、我还是习惯叫变量、都差不多
在软件的右边如图、参数集合---插入---参数
(2)更改属性
这个就是相当于给参数或者说变量命名、定义格式、定义数据类型
名称:VB付给这个参数值的时候要写
格式:日期是yyyy/mm/dd时间的是hh:mm:ss如图
我一共定义了4个参数、
date1和date2是显示周报表查询从日期1到日期2的日期如图
date3和time是显示当前日期和时间
具体效果如图
(3)放到页眉上
参数定义好、下面就放上去了、首先在页眉新建一个综合文字框
然后双击文字框、弹出窗口点击、插入域-----引用类型选参数----然后选择参数
效果如图
3、制作表格
(1)连接数据库(从左到右依次点击)
——查询的SQL语句写自己的表
记得点下测试、一般没问题、有问题的话看下SQL语句是否写错
(2)生成字段和列
先点击1、然后点击2、便可以自动执行刚刚的SQL语句获得表里的字段和行
页眉就不说了、直接用静态框就可以了
1.添加Grid++Report 的控件、如图
2.选择名字为GRDisplayViewer的控件、放到From上(蓝色第一个)
3.其他控件也放上去、名字如下图(跟我名字一样才能用.名字不一样要改代码)
4.开始时间和结束时间用的是时间控件DTPicter时间控件,部件载入名上图有(本人忘了是哪个了……)
5.引用(菜单--工程--引用)引用Grid++Re…………如图
6.代码(复制进去应该就行了、有详细备注、实在不懂的可以点我)
[vb] view plaincopyprint? 1.Dim WithEvents Report As grproLibCtl.GridppReport '实例化报表</SPAN> 2.'报表刷新 3.Private Sub cmdCheckDay_Click() 4. Dim txtsql As String 5. '判定终止日期不能小于起始日期 6. If StartDateView.Value > EndDateView.Value Then '条件限制 7. MsgBox "终止日期不能小于起始日期!", ,"温馨提示" 8. Exit Sub 9. End If 10. 11. Report.DetailGrid.Recordset.ConnectionString = ConnectString '数据源连接数据库直接调用写好的模块内容 12. If txtBalance.Text = "" Then '判断上期text里是否为空 13. '查询日期1到日期2的记录 14. txtsql = "select * from ReportForms_Info where cast(convert(varchar,date) as datetime) between '" & _ 15. StartDateView.Value & "' and '" & EndDateView.Value & "'" 16. Else 17. '如果上期余额的text里不为空则查询日期1到日期2中、上期余额是文本中的记录 18. txtsql = "select * from ReportForms_Info where cast(convert(varchar,date) as datetime) between '" & _ 19. StartDateView.Value & "' and '" _ 20. & EndDateView.Value & "' And Balance = '" & txtBalance.Text & "'" 21. End If 22. 23. '显示报表中的内容 24. Report.DetailGrid.Recordset.QuerySQL = txtsql 25. grdWeekliyBill.Refresh 26. 27. '报表模板上的4个日期或时间赋值 28. Report.ParameterByName("Date1").Value = Format$(StartDateView.Value, "yyyy-mm-dd") 29. Report.ParameterByName("Date2").Value = Format$(EndDateView.Value, "yyyy-mm-dd") 30. Report.ParameterByName("Date3").Value = Date 31. Report.ParameterByName("time").Value = Time 32. 33.End Sub 34.'预览 35.Private Sub cmdpreview_Click() 36. Report.PrintPreview (True) 37.End Sub 38. 39.'打印 40.Private Sub cmdput_Click() 41. Report.[Print] (True) 42.End Sub 43. 44.'载入窗体 45.Private Sub Form_Load() 46. '创建报表对象 47. Set Report = New grproLibCtl.GridppReport 48. '载入报表模版文件 49. Report.LoadFromFile (App.Path & "\周报表.grf") 50. '设置数据连接串 51. Report.DetailGrid.Recordset.ConnectionString = ConnectString 52. 53. '查询语句 54. txtsql = "select * from ReportForms_Info where cast(convert(varchar,date) as datetime) between '" & StartDateView.Value & "' and '" & EndDateView.Value & "'" 55. Report.DetailGrid.Recordset.QuerySQL = txtsql '执行 56. '显示报表中的内容 57. grdWeekliyBill.Report = Report 58. grdWeekliyBill.Start 59. 60. '报表模板上的4个日期或时间赋值 61. Report.ParameterByName("Date1").Value = Format$(StartDateView.Value, "yyyy-mm-dd") 62. Report.ParameterByName("Date2").Value = Format$(EndDateView.Value, "yyyy-mm-dd") 63. Report.ParameterByName("Date3").Value = Date 64. Report.ParameterByName("time").Value = Time 65. 66.End Sub Dim WithEvents Report As grproLibCtl.GridppReport '实例化报表</SPAN> '报表刷新 Private Sub cmdCheckDay_Click() Dim txtsql As String '判定终止日期不能小于起始日期 If StartDateView.Value > EndDateView.Value Then '条件限制 MsgBox "终止日期不能小于起始日期!", ,"温馨提示" Exit Sub End If Report.DetailGrid.Recordset.ConnectionString = ConnectString '数据源连接数据库直接调用写好的模块内容 If txtBalance.Text = "" Then '判断上期text里是否为空 '查询日期1到日期2的记录 txtsql = "select * from ReportForms_Info where cast(convert(varchar,date) as datetime) between '" & _ StartDateView.Value & "' and '" & EndDateView.Value & "'" Else '如果上期余额的text里不为空则查询日期1到日期2中、上期余额是文本中的记录 txtsql = "select * from ReportForms_Info where cast(convert(varchar,date) as datetime) between '" & _ StartDateView.Value & "' and '" _ & EndDateView.Value & "' And Balance = '" & txtBalance.Text & "'" End If '显示报表中的内容 Report.DetailGrid.Recordset.QuerySQL = txtsql grdWeekliyBill.Refresh '报表模板上的4个日期或时间赋值 Report.ParameterByName("Date1").Value = Format$(StartDateView.Value, "yyyy-mm-dd") Report.ParameterByName("Date2").Value = Format$(EndDateView.Value, "yyyy-mm-dd") Report.ParameterByName("Date3").Value = Date Report.ParameterByName("time").Value = Time End Sub '预览 Private Sub cmdpreview_Click() Report.PrintPreview (True) End Sub '打印 Private Sub cmdput_Click() Report.[Print] (True) End Sub '载入窗体 Private Sub Form_Load() '创建报表对象 Set Report = New grproLibCtl.GridppReport '载入报表模版文件 Report.LoadFromFile (App.Path & "\周报表.grf") '设置数据连接串 Report.DetailGrid.Recordset.ConnectionString = ConnectString '查询语句 txtsql = "select * from ReportForms_Info where cast(convert(varchar,date) as datetime) between '" & StartDateView.Value & "' and '" & EndDateView.Value & "'" Report.DetailGrid.Recordset.QuerySQL = txtsql '执行 '显示报表中的内容 grdWeekliyBill.Report = Report grdWeekliyBill.Start '报表模板上的4个日期或时间赋值 Report.ParameterByName("Date1").Value = Format$(StartDateView.Value, "yyyy-mm-dd") Report.ParameterByName("Date2").Value = Format$(EndDateView.Value, "yyyy-mm-dd") Report.ParameterByName("Date3").Value = Date Report.ParameterByName("time").Value = Time End Sub