'必须引用ado及crystal report9 activex designer design time library(internal)
'使用控件 crystal report viewer contral
Dim strsql As String
Dim capp As New CRAXDRT.Application
Dim carp As New CRAXDRT.Report
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'报表存放的路径
Set carp = capp.OpenReport(App.Path & "/rptTest.rpt")
If cn.State = adStateOpen Then cn.Close
With cn
.Provider = "sqloledb"
If opt1.Value = True Then
.ConnectionString = "data source=mrp-server;initial catalog=voutmmstdata;user id=sa;password=12345"
Else
.ConnectionString = "data source=mrp-03;initial catalog=test;user id=sa;password="
End If
.Open
End With
'报表设计时并不一定要指定过滤的条件,也就是说没有指定WHERE后的语句
If opt1.Value = True Then
strsql = "select * from mmst011 left join mmst012 on mmst011.order_no=mmst012.order_no where mmst011.order_no in ('00000733','00000737')"
Else
strsql = "select * from mmst011 left join mmst012 on mmst011.order_no=mmst012.order_no where mmst011.order_no in ('00000730','00000731')"
End If
If rs.State = adStateOpen Then rs.Close
With rs
.ActiveConnection = cn
.CursorLocation = adUseClient
.Open strsql, cn, adOpenDynamic, adLockOptimistic
End With
'也可以carp.Database.Tables(1).SetDataSource rs
carp.Database.SetDataSource rs
'以下是传参数的用法,报表上已放有一个名为strName的参数字段
If opt1.Value = True Then
carp.ParameterFields.GetItemByName("strName").AddCurrentValue ("Mrp-server上的订单数据")
Else
carp.ParameterFields.GetItemByName("strName").AddCurrentValue ("mrp-03上的订单数据")
End If
Form3.CRViewer.ReportSource = carp
Form3.CRViewer.ViewReport
Form3.CRViewer.Zoom 100
Form3.Show
End Sub