参考一下以下:Option Explicit
Private obj As clsreport
'定义局部变量Private Sub Command1_Click()
Dim b1 As Boolean
Dim sd(2) As String
Dim mg As Integersd(1) = Trim(TextID.Text)
sd(2) = Trim(TextName.Text)
'把要打印的数据赋给sd数组,此例的数据来自文本框。
'在多层开发应用中数据源通常是通过业务层和数据层处理
'后返回的记录集(如ADODB.Recordset),把记录集
'赋给sd数组,即可打印。注意要保持记录集的字段数
'与设计器的文本框数一致。
b1 = obj.AddRecord(sd) '增加记录
If b1 = True Then
mg = MsgBox("增加记录成功!", vbOKOnly, "打印消息")
Else
mg = MsgBox("增加记录失败!", vbOKOnly, "打印消息")
End If
End SubPrivate Sub Command2_Click()
Dim b1 As Boolean
Dim mg As Integerb1 = obj.Show_Report '浏览记录
If Not b1 Then
mg = MsgBox("浏览操作失败!", vbOKOnly, "打印消息")
End If
End SubPrivate Sub Command3_Click()
Dim b1 As Boolean
Dim mg As Integerb1 = obj.Print_Report '打印报表
If Not b1 Then
mg = MsgBox("打印操作失败!", vbOKOnly, "打印消息")
End If
End SubPrivate Sub Command4_Click()
Unload Me
'关闭窗口
End SubPrivate Sub Form_Load()
Set obj = New clsreport
'创建对象实例
End SubPrivate Sub Form_Unload(Cancel As Integer)
Set obj = Nothing
'撤消对象
End Sub
modal 
Option Explicit
Private RST_RPT As ADODB.Recordset
'定义一个记录集变量Private Sub Class_Initialize()
Set RST_RPT = CreateObject("ADODB.Recordset")
'创建一个空的记录集
With RST_RPT
.Fields.Append "tid", adChar, 10
.Fields.Append "tname", adChar, 20
'往记录集中添加字段(此例假设只有两个,如需要可增加多个字段)
.CursorLocation = adUseClient
'设置CursorLocation属性为"客户端游标"
End WithRST_RPT.Open
'打开记录集
Set DataReport1.DataSource = RST_RPT
'设置DataReport1设计器的数据源为 RST_RPT 记录集
End SubPrivate Sub Class_Terminate()
If Not RST_RPT Is Nothing Then
RST_RPT.Close
'关闭记录集
End If
Set RST_RPT = Nothing
'撤消对象
End Sub
Public Function AddRecord(strdata() As String) As Boolean
On Error GoTo errdo
'错误捕获
With RST_RPT
.AddNew
!tid = strdata(1)
!tname = strdata(2)
'给记录集赋值
.Update
'更新修改
End WithAddRecord = True
'如果成功则返回"真"
Exit Function
errdo:
'可根据需要对错误进行分类处理
'方法可查阅随机文档的"调试代码和处理错误"部分
'此例省略
AddRecord = False
'如果失败则返回"假"
Set RST_RPT = Nothing
'撤消对象
End FunctionPublic Function Print_Report() As Boolean
On Error GoTo errdo
If Not RST_RPT Is Nothing Then
Set DataReport1.DataSource = RST_RPT
'重置数据源
End If
DataReport1.PrintReport
'直接打印
Print_Report = True
'如果成功则返回"真"
Exit Function
errdo:
Print_Report = False
'如果失败则返回"假"
End FunctionPublic Function Show_Report() As Boolean
On Error GoTo errdo
If Not RST_RPT Is Nothing Then
Set DataReport1.DataSource = RST_RPT
'重置数据源
End If
DataReport1.Show
'浏览
Show_Report = True
'如果成功则返回"真"
Exit Function
errdo:
Show_Report = False
'如果失败则返回"假"
End Function

解决方案 »

  1.   

    'Oracle 中出现过 第一条记录打印不出来的情况adoRecordsetX.Open strSql, adoConnectionX,adOpenKeyset
    或者:
    adoRecordset.CursorLocation = adUseClient
    adoRecordsetX.Open strSql, adoConnectionX
      

  2.   

    to playyuer(女㊣爱) :
    I have get"第一条记录",but all records repeat 2 times.
    why??
      

  3.   

    '你按着我说的作就行了:
    adoRecordsetX.Open strSql, adoConnectionX,adOpenKeyset
    或者:
    adoRecordset.CursorLocation = adUseClient
    adoRecordsetX.Open strSql, adoConnectionX'这是一个 Bug,不信:
    BUG: DataReport Does Not Show First Record with Server-Side Forward-Only Cursor
    http://support.microsoft.com/support/kb/articles/Q300/3/87.ASP?LN=EN-US&SD=gn&FR=0&qry=datareport&rnk=23&src=DHCS_MSPSS_gn_SRCH&SPR=VBB
      

  4.   

    1.you are right,I have get the "第一条记录"
    2.but all records repeat 2 times.
    why??
      

  5.   

    谢谢你的帮助!问题解决了!我把Sql改作View就没这个毛病了。