'表1
'ID-------字段1--------字段2
'1--------内容----------内容
'1--------内容----------内容
'1--------内容----------内容
'4--------内容----------内容
'5--------内容----------内容
'5--------内容----------内容
'9--------内容----------内容
'9--------内容----------内容
'9--------内容----------内容
'9--------内容----------内容
'9--------内容----------内容
'/////////////////////////////////////////////////////////////////////////////For i = ListView1.ListItems.Count To 1 Step -1   '每次查询之前先删除全部内容
         ListView1.ListItems.Remove (i)
    Next iDim strSql As String
Set conn = New ADODB.Connection
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path + "\数据库.mdb;User ID=; Jet OLEDB:database Password = 123"
'//////////////////////////////连接数据库/////////////////////////////////////////////////////////
Set rs = New ADODB.Recordset
strSql = "SELECT * from 表1"
rs.Open strSql, conn, adOpenKeyset, adLockOptimisticIf rs.BOF Or rs.EOF Then
MsgBox "没有任何您需要查找的信息,请确认好查找条件后重新查找", vbInformation, "信息提示"
Exit Sub
End If
Do While Not rs.EOF
        For i = 1 To rs.RecordCount
        Set Fliv = ListView1.ListItems.Add()
        Fliv.Text = i
        
        Fliv.SubItems(1) = "OK"
        Fliv.SubItems(2) = rs.Fields("字段1")
        Fliv.SubItems(3) = rs.Fields("字段2")
        Fliv.SubItems(4) = rs.Fields("ID")
'///////////////////////////////////////////////////////////////////////////////////////////////重点在这里
表2:
ID-------代码--------用量
1--------101----------1
1--------201----------5
1--------301----------4
4--------101----------6
5--------401----------20
5--------501----------8
9--------101----------3
9--------201----------5
9--------301----------28
9--------401----------1
9--------501----------2
表3
代码----------名称
101-----------花
201-----------虫
301-----------蟹
401-----------虾
501-----------鱼
怎么用VB LISTVIEW 继续将查询的结果继续附加到ID列的后面,(表1.ID=表2.ID)LISTVIEW 最终显示为序号----固定列2--固定列3--固定列4-----ID---101花---201虫---301蟹---401虾----501鱼
--1-------OK------字段1-----字段2------1----1-------5-------4-------无-------无
--2-------OK------字段1-----字段2------4----6-------无------无------无-------无
--3-------OK------字段1-----字段2------5----无------无------无------20--------8
--4-------OK------字段1-----字段2------9----3--------5------28-------1--------2
rs.MoveNext
Next i
Loop
rs.Close

解决方案 »

  1.   

    strSql ="select 表1.字段1, 表1.字段2,表1.ID,表2.代码,表3.名称,表2.用量 from 表1,表2,表3 where 表1。id=表2。id and 表3。代码 = 表2。代码"。这更你一样
    Fliv.SubItems(2) = rs.Fields("字段1")
      Fliv.SubItems(3) = rs.Fields("字段2")
      Fliv.SubItems(4) = rs.Fields("ID")
      Fliv.SubItems(5) = rs.Fields("代码")
      Fliv.SubItems(6) = rs.Fields("名称")
      Fliv.SubItems(7) = rs.Fields("用量")
    //////////////////////////////////////////////////////////////////////////
      

  2.   

    http://topic.csdn.net/u/20100806/10/ef6c8994-7e02-4895-b7cf-adc1c72eed25.html
    你 以前教过我
    Private Sub Command1_Click()
        Dim strSql As String
        Dim cn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        Dim i As Integer
        Dim j As Integer
        
        cn.CursorLocation = adUseClient
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\tt\t1.mdb;Persist Security Info=False"
        
        strSql = ""
        strSql = strSql & " Transform Sum(用量) " & vbNewLine
        strSql = strSql & " SELECT 日期, 产量" & vbNewLine
        strSql = strSql & " FROM (select a1.日期, 明细, 用量, 产量" & vbNewLine
        strSql = strSql & " from a1, a2, (select 日期, sum(a1.产量) as 产量 from a1 group by 日期) a3" & vbNewLine
        strSql = strSql & " Where a1.id = a2.id And a1.日期 = a3.日期" & vbNewLine
        strSql = strSql & " )" & vbNewLine
        strSql = strSql & " GROUP BY 日期, 产量" & vbNewLine
        strSql = strSql & " Pivot 明细" & vbNewLine    rs.Open strSql, cn, adOpenStatic, adLockOptimistic
        
        
        With ListView1
            '设置ListView1的标题、显示类型、整行选择和网格线属性
            .ColumnHeaders.Clear
            .ListItems.Clear
            .View = lvwReport
            .FullRowSelect = True
            .GridLines = True
            '为ListView1设置标题
            For i = 0 To rs.Fields.Count - 1
                .ColumnHeaders.Add , , rs.Fields(i).Name
            Next i
            '为ListView1设置各行数据
            .ListItems.Clear
            i = 0
            While Not rs.EOF
                i = i + 1
                .ListItems.Add , , rs.Fields(0).Value
                For j = 1 To rs.Fields.Count - 1
                    .ListItems(i).SubItems(j) = rs.Fields(j).Value & ""
                Next j
                rs.MoveNext
            Wend
        End With    rs.Close
        Set rs = Nothing
        cn.Close
        Set cn = Nothing
        
    End Sub
    能不能不用Transform Pivot?因为还要加其他的查询条件,这个用起来太麻烦了,不容易调试啊
      

  3.   


    呵呵,你最初是要sql,没有说用在vb里,所以用Transform Pivot
    用上个帖子老虎的做法就可以了
      

  4.   

    他的方法我把列.ColumnHeaders.Clear这一条去掉后到是可以了,但是行,我怎么都对不上
      

  5.   

    首先,数据的清除用下面的语句比逐个删除快多了。
    ListView1.ListItems.Clear其次,列的问题只不过是有了静态列和动态列的区分。
    静态列一开始就设计好,或者在 Form_Load 中添加。
    动态列重新创建和上个帖子的区别只是不用
    ListView1.ColumnHeaders.Clear
    全清,而是改用
    While ListView1.ColumnHeaders.Count > 4
        ListView1.ColumnHeaders.Remove 5
    Wend
    的方式将后面的列删除,然后一样的添加列、填数据。
      

  6.   

    两位大哥,我不是要清除数据,而是要把数据按上面的要求读出来 紧跟在固定列后面的动态列的ID = ID
      

  7.   

    想什么呢?既然称为动态行,那就是整行的。如果你的行数固定,固定列的值也固定,就在 Form_Load 中添加好。
    刷新时只需要对某些 SubItems(i) 进行赋值,不删除/添加行。
      

  8.   

    那就下标直接加2
    .SubItems(i+2) = "无"
      

  9.   


        '添加列头'
        'ListView1.ListItems.Clear
        'ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add , , "ID"
        While Not rsCol.EOF
            ListView1.ColumnHeaders.Add , , rsCol("代码") & rsCol("名称")
            oSubCode.Add rsCol("代码").Value
            
            rsCol.MoveNext
        Wend
        
        '添加数据'
        While Not rsRow.EOF
            Set lvi = ListView1.ListItems.Add(, , rsRow("ID"))
            
            For i = 1 To oSubCode.Count
                rsData.Filter = "(ID=" & rsRow("ID") & ") AND (代码='" & oSubCode(i) & "')"
                
                If rsData.EOF Then
                    lvi.SubItems(i+2) = "无"
                Else
                    lvi.SubItems(i+2) = rsData("用量")
                End If
            Next
            
            rsRow.MoveNext
        Wend数据显示开是不对,大哥能加我QQ吗,远程帮我调试一下
      

  10.   

    我的QQ:609393693
    现在我调试下来变成这样了
    列1-------------列2----------ID(动态列)--。
    ID(动态列)----列值-----------动态值。。
    只要把第一列的ID能够移动到ID动态也就是第3列就对了  要怎么把他移过去
    '添加列头'
        ListView1.ListItems.Clear
        'ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add , , "ID"
        While Not rsCol.EOF
            ListView1.ColumnHeaders.Add , , rsCol("代码") & rsCol("名称")
            oSubCode.Add rsCol("代码").Value
            
            rsCol.MoveNext
        Wend
        
        '添加数据'
        While Not rsRow.EOF
            Set lvi = ListView1.ListItems.Add(, , rsRow("ID"))
            
            For i = 1 To oSubCode.Count
                rsData.Filter = "(ID=" & rsRow("ID") & ") AND (代码='" & oSubCode(i) & "')"
                
                If rsData.EOF Then
                    lvi.SubItems(i+2) = "无"
                Else
                    lvi.SubItems(i+2) = rsData("用量")
                End If
            Next
            
            rsRow.MoveNext
        Wend
      

  11.   

        ListView1.ListItems.Clear
        '保留两列'.Clear
        While ListView1.ColumnHeaders.Count > 2
            ListView1.ColumnHeaders.Remove 3
        Wend
        '添加列头'
        ListView1.ColumnHeaders.Add , , "ID"
        While Not rsCol.EOF
            ListView1.ColumnHeaders.Add , , rsCol("代码") & rsCol("名称")
            oSubCode.Add rsCol("代码").Value
            
            rsCol.MoveNext
        Wend
        
        '添加数据'
        While Not rsRow.EOF
            Set lvi = ListView1.ListItems.Add(, , "固定值1")
            lvi.SubItems(1) = "固定值2"
            lvi.SubItems(2) = rsRow("ID")
            
            For i = 1 To oSubCode.Count
                rsData.Filter = "(ID=" & rsRow("ID") & ") AND (代码='" & oSubCode(i) & "')"
                
                If rsData.EOF Then
                    lvi.SubItems(i + 2) = "无"
                Else
                    lvi.SubItems(i + 2) = rsData("用量")
                End If
            Next
            
            rsRow.MoveNext
        Wend