'注意报表1.rpt自己设计 是水晶报表文件Private objCRApp As New CRAXDRT.Application '水晶报表应用程序对象 Private objCRReport As New CRAXDRT.Report '报表对象 Dim rs As ADODB.Recordset Dim msgtext As StringPrivate Sub cmdsearch_Click() '清除报表中保持的数据 objCRReport.DiscardSavedData '形成数据集 '单个表适合用sql语句 strsql = "select * from clerk where clerk_bm='" & Combo1.Text & "'" '注意:多个表筛取数据 必须要用视图,是数据形成一个表,水晶报表不能用sql语句 'strsql="select * from a,b where a.a1=b.a1" '水晶报表不支持这样的sql语句 'strsql = "select * from clerk_organ_view where clerk_bm='" & Combo1.Text & "'" Set rs = ExecuteSQL(strsql, msgtext) 'Executesql是执行sql语句,你可以自己写 '赋给报表数据 objCRReport.Database.SetDataSource rs CRViewer91.ReportSource = objCRReport '指定报表来源 CRViewer91.ReportSource = objCRReport '显示报表 CRViewer91.ViewReport End SubPrivate Sub Form_Load() Dim strsql As String strsql = "select distinct clerk_bm from clerk" Set rs = ExecuteSQL(strsql, msgtext) Do While Not rs.EOF Combo1.AddItem rs(0) rs.MoveNext Loop
'加载报表模板 '单个数据表形成的报表 Set objCRReport = objCRApp.OpenReport(App.Path & "\1.rpt", 1) '多个数据表形成的报表 Set objCRReport = objCRApp.OpenReport(App.Path & "\2.rpt", 1)
End SubPrivate Sub Form_Resize() ' CRViewer91.Top = 50 ' CRViewer91.Left = 0 ' CRViewer91.Height = ScaleHeight - Combo1.Height ' CRViewer91.Width = ScaleWidth End Sub
2.在查詢出后,把查詢出的rs傳到報表,再執行更新就可以了
3.相關用法的例子請參考水晶報表的文件夾的sample文件夾
Dim ConnAccess As New Connection
Dim StrSQLAccess As String
ConnAccess.Open pSetLinkPrint '这里是连接字符串
'print.mdb为临时存储库
ConnAccess.Execute "Delete from Print" '清空临时库
StrSQLAccess = "select * from Print order by id asc"
Set rsAccess = New Recordset
rsAccess.Open StrSQLAccess, ConnAccess, adOpenStatic, adLockOptimistic
'如有多条数据则可加一个DO循环
rsAccess.AddNew '向临时库中注入数据
rsAccess("号码").Value = "数据"
rsAccess("号码2").Value = "数据2"
... ...
... ...
rsAccess.Update
'在这里显示报表
CrystalReport1.WindowTitle = "打印预览" & " 操作员:" & pUserNameL
CrystalReport1.DataFiles(0) = DBSeaverPath & "\print.mdb"
CrystalReport1.ReportFileName = App.Path & "\Rpt" & "\rtpMX.rpt"
CrystalReport1.WindowState = crptMaximized '最大化
CrystalReport1.Action = 1 rsAccess.Close
Set rsAccess = Nothing
ConnAccess.Close
Set ConnAccess = Nothing
以上是一个例子你可以参照,记得给分,有问题可MSN:[email protected].
连接字符串请参照http://blog.csdn.net/qvbhdnvto/archive/2006/09/17/1233282.aspx
Private objCRReport As New CRAXDRT.Report '报表对象
Dim rs As ADODB.Recordset
Dim msgtext As StringPrivate Sub cmdsearch_Click() '清除报表中保持的数据
objCRReport.DiscardSavedData
'形成数据集
'单个表适合用sql语句
strsql = "select * from clerk where clerk_bm='" & Combo1.Text & "'"
'注意:多个表筛取数据 必须要用视图,是数据形成一个表,水晶报表不能用sql语句
'strsql="select * from a,b where a.a1=b.a1" '水晶报表不支持这样的sql语句
'strsql = "select * from clerk_organ_view where clerk_bm='" & Combo1.Text & "'"
Set rs = ExecuteSQL(strsql, msgtext) 'Executesql是执行sql语句,你可以自己写
'赋给报表数据
objCRReport.Database.SetDataSource rs
CRViewer91.ReportSource = objCRReport '指定报表来源
CRViewer91.ReportSource = objCRReport
'显示报表
CRViewer91.ViewReport
End SubPrivate Sub Form_Load()
Dim strsql As String
strsql = "select distinct clerk_bm from clerk"
Set rs = ExecuteSQL(strsql, msgtext)
Do While Not rs.EOF
Combo1.AddItem rs(0)
rs.MoveNext
Loop
'加载报表模板
'单个数据表形成的报表
Set objCRReport = objCRApp.OpenReport(App.Path & "\1.rpt", 1)
'多个数据表形成的报表
Set objCRReport = objCRApp.OpenReport(App.Path & "\2.rpt", 1)
End SubPrivate Sub Form_Resize()
' CRViewer91.Top = 50
' CRViewer91.Left = 0
' CRViewer91.Height = ScaleHeight - Combo1.Height
' CRViewer91.Width = ScaleWidth
End Sub