【 tulaoshi.com - ASP.NET 】
                             
                              这个问题在很多论坛里边都有问到。但是一直没找到满意的答案。下边写出一个解决办法
 Dim sql As String
 Dim rstLiuShui As New ADODB.Recordset
 Dim Rpt As New CRAXDDRT.Report
 Dim PrintApp As New CRAXDDRT.Application
 If Option2.Value = True Then
 sql = "select * from n_ihbill where datediff(d,日期,'" & Format(DTPicker1.Value, "yyyy-MM-dd") & "')=0 and 住院号=" & cbopatient.ItemData(cbopatient.ListIndex)
 Else
 sql = "select * from n_ihbill where datediff(d,日期,'" & Format(DTPicker1.Value, "yyyy-MM-dd") & "')=0"
 End If
 Debug.Print sql 
 rstLiuShui.Open sql, adoconn, adOpenForwardOnly, adLockReadOnly 
 If rstLiuShui.EOF And rstLiuShui.BOF Then
 MsgBox "没有可用数据!", vbInformation
 Exit Sub
 End If
 Set Rpt = PrintApp.OpenReport("cryliushui.rpt")
 Rpt.Database.SetDataSource rstLiuShui
 Call viewReport(Rpt, "", "打印流水")
 rstLiuShui.Close
 Set rstLiuShui = Nothing
这样就可以实现程序与报表的逻辑分离。如果用报表设计器。每次更改报表格式都需要编译程序。客户甚至可以自己更改报表格式。