Sub search()
str1 = "select * from sys_v_alldata"
If rs3.State <> 1 Then
   rs3.Open str1, Conn, 1, 1
Else
   rs3.Requery
End IfIf rs2.State <> 1 Then
   str = "SELECT * FROM Sys_V_Popedom2 where users='1'"
   rs2.Open str, Conn, 1, 1
Else
   rs2.Requery
End Ifj = Val(rs2.Fields(2).value)If ListView1.ListItems.Count > 0 Then
  ListView1.ListItems.Clear
End If
 
For k = 1 To rs3.RecordCount
     With ListView1
         Set LtItm = .ListItems.Add
         LtItm.Text = rs3.Fields(1).value
         LtItm.SubItems(1) = rs3.Fields(2).value
         LtItm.SubItems(2) = rs3.Fields(3).value
         LtItm.SubItems(3) = rs3.Fields(4).value
         LtItm.SubItems(4) = rs3.Fields(5).value
         LtItm.SubItems(5) = rs3.Fields(6).value
         'LtItm.SubItems(6) = rs3.Fields(10).value
           For i = 1 To rs2.RecordCount
              
              If IsNull(rs3.Fields(j + 9).value) = False Then
               LtItm.SubItems(i + 5) = rs3.Fields(j + 9).value
               
              Else
               LtItm.SubItems(i + 5) = ""
              End If
              rs2.MoveNext
           Next i
      End With
     rs3.MoveNext
Next k
rs3.Close
End Sub问题是那里出错,走到rs2.MoveNext停下来了,说当前记录被册徐

解决方案 »

  1.   

    RecordCount属性是成员数量,如果成员是从0开始,那你就得减1.你试试着吧.....数据库我门外汉...-_-
      

  2.   

               For i = 1 To rs2.RecordCount 
                   
                  If IsNull(rs3.Fields(j + 9).value) = False Then 
                   LtItm.SubItems(i + 5) = rs3.Fields(j + 9).value 
                    
                  Else 
                   LtItm.SubItems(i + 5) = "" 
                  End If 
                  rs2.MoveNext 
               Next i问题出在这里,当这里执行了一遍,rs2就已经移动到数据集最后面了,你外层循环再执行一下,到了这里再用rs2.movenext已经没得移了,在后面加个movefirst就可以了
               For i = 1 To rs2.RecordCount 
                   
                  If IsNull(rs3.Fields(j + 9).value) = False Then 
                   LtItm.SubItems(i + 5) = rs3.Fields(j + 9).value 
                    
                  Else 
                   LtItm.SubItems(i + 5) = "" 
                  End If 
                  rs2.MoveNext 
               Next i
               rs2.MoveFirst
      

  3.   

    楼上的可以解稀一下吗?问题也是没有解决,我详细说明一下吧
    表一是用户权限视图Sys_V_Popedom2    rs3
    列名name    users    functioncode三列
        name1    1         1
       name2     1         2 
        name3     1         3 
    表二是总数据视图sys_v_alldata     rs2
       里面有100多列列名之前已经动态加入
    Private Sub Form_Load()
    ListView1.View = lvwReport
    ListView1.ColumnHeaders.Add 1, , "送样日期"
    ListView1.ColumnHeaders.Add 2, , "送样编号"
    ListView1.ColumnHeaders.Add 3, , "试样名称及说明"
    ListView1.ColumnHeaders.Add 4, , "登记部门"
    ListView1.ColumnHeaders.Add 5, , "分类号"
    ListView1.ColumnHeaders.Add 6, , "子类号"If Conn.State <> 1 Then
        Conn.CursorLocation = adUseClient
        Conn.Open LoginDB
    End IfIf rs4.State <> 1 Then
       str = "SELECT * FROM Sys_V_Popedom2 where users='1'"
       rs4.Open str, Conn, 1, 1
    Else
       rs4.Requery
    End IfFor i = 1 To rs4.RecordCount
    ListView1.ColumnHeaders.Add Val(rs4.Fields(2)) + 6, , rs4.Fields(0)
    rs4.MoveNext
    NextsearchEnd Sub第二部是想在这个表循环加入数据Sub search() 
    str1 = "select * from sys_v_alldata" 
    If rs3.State  <> 1 Then 
       rs3.Open str1, Conn, 1, 1 
    Else 
       rs3.Requery 
    End If If rs2.State  <> 1 Then 
       str = "SELECT * FROM Sys_V_Popedom2 where users='1'" 
       rs2.Open str, Conn, 1, 1 
    Else 
       rs2.Requery 
    End If j = Val(rs2.Fields(2).value) If ListView1.ListItems.Count > 0 Then 
      ListView1.ListItems.Clear 
    End If 
      
    For k = 1 To rs3.RecordCount 
         With ListView1 
             Set LtItm = .ListItems.Add 
             LtItm.Text = rs3.Fields(1).value 
             LtItm.SubItems(1) = rs3.Fields(2).value 
             LtItm.SubItems(2) = rs3.Fields(3).value 
             LtItm.SubItems(3) = rs3.Fields(4).value 
             LtItm.SubItems(4) = rs3.Fields(5).value 
             LtItm.SubItems(5) = rs3.Fields(6).value 
             'LtItm.SubItems(6) = rs3.Fields(10).value 
               For i = 1 To rs2.RecordCount 
                   
                  If IsNull(rs3.Fields(j + 9).value) = False Then 
                   LtItm.SubItems(i + 5) = rs3.Fields(j + 9).value 
                    
                  Else 
                   LtItm.SubItems(i + 5) = "" 
                  End If 
                  rs2.MoveNext 
               Next i 
          End With 
         rs3.MoveNext 
    Next k 
    rs3.Close 
    End Sub Val(rs2.Fields(2).value)是j的值,也就是表一的functioncode的值,而第j + 9项就是跟表二的列名一一
    对应,例如在数据库中第十列是"含沙",所以rs3.Fields(j + 9).value 就是含沙这一列的值
      

  4.   

    3楼解释得很清楚了,和列没关系
    在k = 1的循环中,
    对于
    For i = 1 To rs2.RecordCount  
        rs2.MoveNext  '取下一条记录
    Next i
    rs2的记录集的当前记录已经指向记录集的尾部了,
    所以在接下来k = 2的循环中
    在进行rs2.MoveNext就出错了,因为记录集的尾部后面没有记录了3楼也给出了解决办法,就是在每次进行For i = 1 To rs2.RecordCount之前
    都要做rs2.MoveNext 的操作,把rs2的记录集的当前记录重新指向记录集的头部