代码如下:
Private Sub Command1_Click()
dim j as integer
dim sql as string
dim rs as new ADODB.Recordsetsql = "select * from Checking_attend  where 考勤时间 = '" & Trim(Combo1.Text) & "' and  所在部门='" & Trim(Combo3.Text) & "'"
           transactsql (sql)
     rs.Open sql, conn, adOpenKeyset, adLockOptimistic           
           
         j = 1
        While Not rs .EOF   '循环填充
        
        MS1.TextMatrix(j, 0) = rs.Fields("职工编号") & ""
        MS1.TextMatrix(j, 1) = rs.Fields("职工姓名") & ""
        MS1.TextMatrix(j, 2) = rs.Fields("所在部门") & ""
        MS1.TextMatrix(j, 3) = rs.Fields("考勤时间") & ""
        MS1.TextMatrix(j, 4) = rs.Fields("事假") & ""
        MS1.TextMatrix(j, 5) = rs.Fields("其它假") & ""
        MS1.TextMatrix(j, 6) = rs.Fields("总假") & ""
        rs.MoveNext
        j = j + 1
        Wend
        End Sub   上面的代码可以实现查询,但是问题时刷新不了,比如"人事部"有5人,"财务部"只有4人,当先查询人事部时没问题,但是你再查询"财务部"就有问题了,除了显示财务部4人外,还显示人事部1人,怎样实现数据的动态刷新? 

解决方案 »

  1.   

    你要先清空MSFlexGrid里面的数据,再把查的结果写进去.就OK了
      

  2.   

    呵呵,谢谢你的提示,我在j = 1 之前加了ms1.clear可以实现动态刷新了,但是刷新的同时把标题也清空了,怎么回事?
      

  3.   

    Private Sub Command1_Click()dim sql as string
    dim rs as new ADODB.Recordset例:dim i as long,j as long
    With ms1
            .Cols = 6
            .Rows = 2
            .FixedCols = 0
            .FixedRows = 1
            .AllowUserResizing = flexResizeBoth
            .GridLinesFixed = flexGridFlat
            .FocusRect = flexFocusLight
            .SelectionMode = flexSelectionFree
               
            .Clear
            .TextMatrix(0, 0) = "标题1"
            .TextMatrix(0, 1) = "标题2"
            .TextMatrix(0, 2) = "标题3"
            .TextMatrix(0, 3) = "标题4"
            .TextMatrix(0, 4) = "标题5"
            .TextMatrix(0, 5) = "标题6"
            
            .ColWidth(0) = 2000
            .ColWidth(1) = 500
            .ColWidth(2) = 500
            .ColWidth(3) = 500
            .ColWidth(4) = 500
            .ColWidth(5) = 0sql = "select * from Checking_attend  where 考勤时间 = '" & Trim(Combo1.Text) & "' and  所在部门='" & Trim(Combo3.Text) & "'"
               transactsql (sql)
         rs.Open sql, conn, adOpenKeyset, adLockOptimistic           
               
            if rs.eof then 
               rs.close
               set rs=nothing
               exit sub
            end if
            rs.MoveLast
            i = rs.AbsolutePosition
            rs.MoveFirst              for j=1 to i
            MS1.TextMatrix(j, 0) = rs.Fields("职工编号") & ""
            MS1.TextMatrix(j, 1) = rs.Fields("职工姓名") & ""
            MS1.TextMatrix(j, 2) = rs.Fields("所在部门") & ""
            MS1.TextMatrix(j, 3) = rs.Fields("考勤时间") & ""
            MS1.TextMatrix(j, 4) = rs.Fields("事假") & ""
            MS1.TextMatrix(j, 5) = rs.Fields("其它假") & ""
            MS1.TextMatrix(j, 6) = rs.Fields("总假") & ""
            rs.MoveNext
           next
           rs.close
           set rs=nothingEnd Sub 
      

  4.   

    不用clear'清空
    MS1.Rows = 2
    for i=0 to MS1.cols-1
     MS1.TextMatrix(1, i) =""
    next
      

  5.   

    你原来的不动,在查询之前加下面的过程
    call InitST_MSFlexGridPrivate Sub InitST_MSFlexGrid()
        With ST_MSFlexGrid
            .Clear
            .Rows = 3
            .Cols = 7
            .Row = 0
        
            .Col = 0               '定各单元格的属性和写题头
            .ColWidth(0) = 900
            .ColAlignment(0) = 4
            .Text = "职工编号"
            
            .Col = 1
            .ColWidth(1) = 2500
            .ColAlignment(1) = 4
            .Text = "职工姓名"   
            .Col = 2
            .ColWidth(2) = 3000
            .ColAlignment(2) = 4
            .Text = "所在部门"
            .Col = 3
            .ColWidth(3) = 1800
            .ColAlignment(3) = 4
            .Text = "考勤时间"
        
            .Col = 4
            .ColWidth(4) = 1800
            .ColAlignment(4) = 4
            .Text = "事假"
            .Col = 5
            .ColWidth(5) = 1800
            .ColAlignment(5) = 4
            .Text = "其它假"
            .Col = 6
            .ColWidth(6) = 1800
            .ColAlignment(6) = 4
            .Text = "总假"
        End With
    End Sub
      

  6.   

    Private Sub Command1_Click()
    dim j as integer
    dim sql as string
    dim rs as new ADODB.Recordsetsql = "select * from Checking_attend  where 考勤时间 = '" & Trim(Combo1.Text) & "' and  所在部门='" & Trim(Combo3.Text) & "'"
               transactsql (sql)
         rs.Open sql, conn, adOpenKeyset, adLockOptimistic           
               
             j = 1
             MS1.rows=1'''''''''''''''''''''''''''''''''''增加的语句        While Not rs .EOF   '循环填充        MS1.rows=MS1.rows+1'''''''''''''''''''''''''''''''''''增加的语句
            MS1.TextMatrix(j, 0) = rs.Fields("职工编号") & ""
            MS1.TextMatrix(j, 1) = rs.Fields("职工姓名") & ""
            MS1.TextMatrix(j, 2) = rs.Fields("所在部门") & ""
            MS1.TextMatrix(j, 3) = rs.Fields("考勤时间") & ""
            MS1.TextMatrix(j, 4) = rs.Fields("事假") & ""
            MS1.TextMatrix(j, 5) = rs.Fields("其它假") & ""
            MS1.TextMatrix(j, 6) = rs.Fields("总假") & ""
            rs.MoveNext
            j = j + 1
            Wend
            End Sub 
      

  7.   

    TO:feiyun0112(http://feiyun0112.cnblogs.com/) 
    不用clear'清空
    MS1.Rows = 2
    for i=0 to MS1.cols-1
     MS1.TextMatrix(1, i) =""
    next
    _________________________________feiyun0112的方法在ROWS比较多时,应该比clear更快些,但上面的代码要改成:
    for j=1 to i
            MS1.TextMatrix(j, 0) = rs.Fields("职工编号") & ""
            MS1.TextMatrix(j, 1) = rs.Fields("职工姓名") & ""
            MS1.TextMatrix(j, 2) = rs.Fields("所在部门") & ""
            MS1.TextMatrix(j, 3) = rs.Fields("考勤时间") & ""
            MS1.TextMatrix(j, 4) = rs.Fields("事假") & ""
            MS1.TextMatrix(j, 5) = rs.Fields("其它假") & ""
            MS1.TextMatrix(j, 6) = rs.Fields("总假") & ""
            rs.MoveNext
            MS1.ROWS=MS1.ROWS+1
    next
    MS1.ROWS=MS1.ROWS-1这样的方法速度最快!不要用While Not rs .EOF ,否则每rs.MoveNext一次,都要做一次判断RS是否已EOF,速度慢很多,可以拿10W条记录做个实验的.
      

  8.   

    非常感谢楼上efengxu,feiyun0112,yming,特别是ceagle提供的宝贵意见,我的测试通过了,正在测试相关的问题,稍后一起给你们结分^_^