如果数据源来自数据环境我是这么做的
Unload Envir
Load Envir
Report1.Refresh
Report1.Show 1

解决方案 »

  1.   

    设数据环境为con,有Command为rsCustif con.commands(1).state<>adstateclosed then
      con.close
    endif
    con.open "..."
    con.commands(1).rsCust或:
    if con.rsrscust.state<>adstateclosed then
     con.rsrscust.close
    endif
    con.rscustOK??
      

  2.   

    requery方法
    欢迎访问 http://microinfo.top263.net
    1.《VB 6之数据报表使用技巧》http://media.ccidnet.com/ciw/871/b1301.htm2.PlayYuer 2000/02/01 贴:
    《VB6之Data Report全面解决方案(1)》(未完待续)    Microsoft Visual Basic 6.0 专业版和企业版中的数据报表设计器(Data Report Designer)与数据环境设计器
    (Data Environment Designer) 是数据访问的新内容。Microsoft Developer Network Library Visual Studio 6.0
    所提供的示例应用程序: \Samples\Vb98\DataRept\ 目录下的 Prjnwind.vbp 工程使用一个 DataEnvironment 作为
    数据源,演示了数据报表设计器的基本功能。该示例在程序设计阶段 (Design Time) 就已将 DataEnvironment 设为
    Data Report 的数据源,并将打印格式也一并设好以备打印,这种做法非常不利于程序的通用性。当然,我们也可以对
    DataEnvironment 进行编程,在程序运行阶段 (Run Time) 控制数据源 DataEnvironment 的 Connection (连接) 的
    Command(命令) 的 CommandText 属性,即:其所对应的记录集 (rsCommand) 来打印不同的数据,可以参阅微软官方网
    站的 Knowledge Base(知识库)所载的《Q190411 - HOWTO Bind a DataReport To an ADO Recordset at Run Time》
    一文。其实,Data Report 是可以完全脱离 DataEnvironment ,而使用其它 ADODB 数据源 (DataSource) 的,可以参
    阅:《Q240019 - HOWTO Dynamically Populate a Data Report in Visual Basic》一文,如:ADO Data控件 (ADODC)。
    但是,我们在程序设计阶段不能将 ADO Data 控件(ADODC)设为 Data Report 的数据源。原因很简单, ADODC 是必须
    绘制在 Form(窗体) 上的,是模块级的,而 Data Report 与 Form 是模块与模块的关系,而模块之间要共享数据,是必
    须通过 Public(全局) 变量来实现的。所以,DataReport 要使用一个全局的,或者是本设计器模块内的模块级或过程
    级的数据源,以及其它数据类型的变量。再进一步,DataReport 是可以直接使用 ADODB.Recordset 作为数据源的,即:
    DataReport 可以打印由动态 SQL 语句生成的ADODB.Recordset。事实证明,如果使用 DataEnvironment 是相当浪费
    系统资源的,因为其本身就至少要打开一个 ADODB.Connection(连接),ADODC 同样也要打开一个 Connection,所以直
    接使用ADODB.Recordset作为 DataReport 的数据源是最为经济的用法。下面是使用ADODC和ADODB.Recordset设置DataReport的数据源的实现代码:
    Private Sub DataReport_Initialize()
      ...
      Set Me.DataSource = FormX.AdodcX
      ... 
    End SubPrivate Sub DataReport_Initialize()
      '造一个有若干个字段,若干条记录的的记录集
      '该记录集也可以是在其它模块中声明的 Public (全局) 并已经打开的记录集
      Dim adoRecordsetX As New ADODB.Recordset
      adoRecordsetX.Fields.Append "Fld1", adVariant, , adFldIsNullable + adFldMayBeNull
      adoRecordsetX.Fields.Append "Fld2", adVariant, , adFldIsNullable + adFldMayBeNull
      adoRecordsetX.Fields.Append "Fld3", adVariant, , adFldIsNullable + adFldMayBeNull
      adoRecordsetX.Open
      adoRecordsetX.AddNew Array("fld1", "fld2", "fld3"), Array("aa", True, 123)
      adoRecordsetX.AddNew Array("fld1", "fld2", "fld3"), Array(True, 123, "aa")
      Set Me.DataSource = adoRecordsetX
      … 
    End Sub
        既然, DataReport 可以打印由动态 SQL 语句生成的ADODB.Recordset,那么就需要编程,在程序运行阶段完全控
    制 DataReport 及数据报表设计器的专用控件。但是DataReport仅为这些专用控件在本设计器内的控件集(Controls)
    中提供索引(Index),这种标识控件的方法非常不利于分别控制不同类型的控件。而且 DataReport 不能象窗体(Form)
    那样可以编程在程序运行阶段动态加入控件,这也不利于打印不同的动态数据源。还好,VB提供了集合对象(Collection),
    这样就可以编程,在程序运行阶段将数据报表设计器专用控件根据其所在的区域(Sections)和所属控件类别等将它们
    分成若干集合,然后通过控制集合的元素来准确有效地控制这些元素所代表的控件。这样,在程序设计阶段就要将足够多
    的控件绘制到DataReport上备用,实现上面的程序代码均可以编写到Sub DataReport_Initialize()事件过程里。下面是将数据报表设计器专用控件根据其所在的区域(Sections)和所属控件类别等将它们分成若干集合的代码:
    Dim RHSec4_RptLbl_Collection As New Collection

    '页标头(PageHeader)区域 Shape(RptShape) 控件集合
    Dim PHSec2_RptShp_Collection As New Collection

    '细节(Detail)区域  TextBox(RptTextBox) 控件集合
    Dim DSec1_RptTxt_Collection As New Collection

    Dim Ctl As Object

    For Each Ctl In Me.Sections.Item("Section1").Controls  'Section1
             Select Case TypeName(Ctl)
                    Case "RptLabel"
                         DSec1_RptLbl_Collection.Add Ctl
                         Ctl.Caption = ""
                    Case "RptShape"
                         DSec1_RptShp_Collection.Add Ctl
                    Case "RptTextBox"
                         Ctl.DataField = adoRecordset.Fields.Item(0).Name 
                         '先将所有TextBox(RptTextBox) 控件绑定到某一字段
                         '否则报错!
                         DSec1_RptTxt_Collection.Add Ctl
             End Select
             Ctl.Visible = False '先使所有控件不可见
    Next Ctl

    细节强调:
        DataReport默认分为页标头、细节、页注脚三个区域,可在每个区域为每种控件定
    义一个或多个集合,注意所有的RptTextBox 控件      
    控件经过上面的分集合过程,控件在集合中就拥有了索引,这样就可以较方便地通过
    制集合的元素来准确有效地控制这些元素所代表的控件的大小、位置、字体、颜色等属性。
    如果报表的格式,即:码放控件的位置,复杂多样,则可在程序设计阶段就将控件绘制到
    DataReport上的适当位置,设计好格式。如果报表格式不很复杂,关键是控件位置的坐标要
    有一定的数学规律,则可编程在程序运行阶段控制其位置,如:打印二维表。