我现在使用此函数来代替.
Function ComputRsFieldCount(Rs As Recordset, sField As String)
    Dim tmpRs As Recordset
    Set tmpRs = Rs.Clone
    Dim iCount As Long
    tmpRs.MoveFirst
    For i = 0 To tmpRs.RecordCount - 1
        iCount = tmpRs(sField).Value + iCount
        tmpRs.MoveNext
    Next
    ComputRsFieldCount = iCount
End Function
有没有现成的函数?另外,如果我使用FILTER后只显示N条记录在DATAGRID里,但我用上面的函数计算出来的数值依然是所有记录的和,有什么办法只遍历可见的记录?

解决方案 »

  1.   

    rs.open "select sum(je) as je afrom table1",conn,1,3
    msgbox rs.fields("je")
      

  2.   

    rs.open "select sum(je) as je from table1",conn,1,3
    msgbox rs.fields("je")
    使用sum求和另外,如果我使用FILTER后只显示N条记录在DATAGRID里,但我用上面的函数计算出来的数值依然是所有记录的和,有什么办法只遍历可见的记录?
    重新绑定记录集既可以了
    看msdn的filter的用法
      

  3.   

    1、sum 求和
    2、如果采用filer 则用过滤条件重新用sum计算rs.open "select sum(je) as je from table1 where 条件 ",conn,1,3
      

  4.   

    sum就很好,应该可以实现你的要求
      

  5.   

    可能我没说清楚吧,基于某种原因我的数据集是自已生成的,而不是SQL语句生成.主要用于暂时存储数据,当统一录入后,再一次写进数据库中.
    '复制一个数据集的结构
    Function cyRs2Rs(ByVal Rs As Recordset) As Recordset
    Screen.MousePointer = 13
        On Error Resume Next    'NULL值写入会出错,则忽略
        
        Dim i As Long
        Dim RsTmp As New Recordset
        With RsTmp
            .CursorLocation = adUseClient
            
            '复制结构
            For i = 0 To Rs.Fields.Count - 1
                .Fields.Append Rs.Fields(i).Name, Rs.Fields(i).Type, 1
            Next
            
            '打开数据集
            .Open
            
            '将内容写入新数据集
            Do While Not Rs.EOF
                .AddNew
                For i = 0 To Rs.Fields.Count - 1
                    '如果值为NULL则忽略写入的错误
                    RsTmp(i).Value = Rs(i).Value
                Next
                '逐条数据加入
                Rs.MoveNext
            Loop
        
            '将指针移到第一条记录
            If .RecordCount > 0 Then .MoveFirst
            
            Set cyRs2Rs = RsTmp
        
        End With
    Screen.MousePointer = 0
    End Function