0 0
想用TreeView控件实现查询~可以展开子节点~(图书类别,下面有三个子类)
之前看了几个相关文章~但是还是对代码着块不太懂 ~
下面是自己弄的~但是一直在报错~  VB实时错误'3265'(当时看一篇文章说的是在出错的地方加上On Error Resume Next,但是加上这个后子节点不能显示相应数据~)
下面是主要代码~
Private Sub Form_Load()
    Dim strSQL As String
    
    '设置TreeView1属性
    TreeView1.LineStyle = 0            '在兄弟节点和父节点之间显示线
    '树状外观包含全部元素
    '建立名称为"图书类别"的父节点
    Set nodx = TreeView1.Nodes.Add(, , "图书类别", "图书类别")
    
    '打开数据库
    DBCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\Data\BookShop.mdb;Persist Security Info=False"
    DBCn.Open
    
    strSQL = "select * from Cate"
    DBRec.Open strSQL, DBCn, adOpenDynamic, adLockOptimistic    '打开Cate表
    If DBRec.EOF Then Exit Sub '如果数据库Cate表为空,则退出当前窗体
    DBRec.MoveFirst
       
    intX = 1    'strX数组下标
    '添加商品类型的子节点
    Do While DBRec.EOF = False
    strX(intX) = DBRec.Fields("分类名称")
    Set nodx = TreeView1.Nodes.Add("图书类别", tvwChild, "Ware" & intX, DBRec.Fields("分类编号") & strX(intX))
    intX = intX + 1
   ' -------------------------这点缺点东西,高手帮忙补上------------------------
    DBRec.MoveNext
    Loop
    DBRec.Close     '关闭Cate表
    DBCn.Close   '关闭数据库
    
    TreeView1.Nodes(1).Expanded = True '默认展开子节点
    '调用初始列表
    ms_db ("图书类别")
    
End Sub

解决方案 »

  1.   

    全部代码如下
    Dim DBCn  As New ADODB.Connection
    Dim DBRec  As New ADODB.Recordset   '打开Cate表
    Dim myConn As ADODB.Connection
    Dim myRs As ADODB.Recordset         '打开Book表
    Dim nodx As Node
    Dim intX As Integer
    Dim intY As Integer
    Dim intZ As Integer
    Dim intU As Integer
    Dim bolTF As Integer
    Dim strX(1 To 200) As String
    Dim strY(1 To 200) As String
    Dim str As String'主要代码,但是很不成熟 - -Private Sub Form_Load()
        Dim strSQL As String
        
        '设置TreeView1属性
        TreeView1.LineStyle = 0            '在兄弟节点和父节点之间显示线
        '树状外观包含全部元素
        '建立名称为"图书类别"的父节点
        Set nodx = TreeView1.Nodes.Add(, , "图书类别", "图书类别")
        
        '打开数据库
        DBCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\Data\BookShop.mdb;Persist Security Info=False"
        DBCn.Open
        
        strSQL = "select * from Cate"
        DBRec.Open strSQL, DBCn, adOpenDynamic, adLockOptimistic    '打开Cate表
        If DBRec.EOF Then Exit Sub '如果数据库Cate表为空,则退出当前窗体
        DBRec.MoveFirst
           
        intX = 1    'strX数组下标
        '添加商品类型的子节点
        Do While DBRec.EOF = False
        strX(intX) = DBRec.Fields("分类名称")
        Set nodx = TreeView1.Nodes.Add("图书类别", tvwChild, "Ware" & intX, DBRec.Fields("分类编号") & strX(intX))
        intX = intX + 1
        
        DBRec.MoveNext
        Loop    DBRec.Close     '关闭Cate表
        DBCn.Close   '关闭数据库
        
        TreeView1.Nodes(1).Expanded = True '默认展开子节点
        '调用初始列表
        ms_db ("图书类别")
        
    End Sub
    Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) 'Treeview1_NodeClick事件
        str = Node.Text
        ms_db (str)     '触发单击事件并通过调用ms_db函数显示相应的列表
    End SubFunction ms_db(strss As String) As Boolean
        
        Dim mystr As String
        Dim introw As Integer
        Dim inthigh As Integer
        
        Set myConn = New ADODB.Connection
        Set myRs = New ADODB.Recordset
        myConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\Data\BookShop.mdb;Persist Security Info=False"
        myConn.Open
        mystr = "select * from Book"
        myRs.Open mystr, myConn, adOpenStatic, adLockReadOnly
        myRs.MoveFirst
        
        
        With MSFlexGrid1
            
            .RowHeight(0) = 500
            .ColWidth(0) = 300
            .ColWidth(1) = 1200
            .ColWidth(2) = 3000
            .ColWidth(3) = 1000
            .ColWidth(4) = 1500
            .ColWidth(5) = 1500
            .ColWidth(6) = 900
            .ColWidth(7) = 900
        
            MSFlexGrid1.TextMatrix(0, 1) = "图书编号"
            MSFlexGrid1.TextMatrix(0, 2) = "图书名称"
            MSFlexGrid1.TextMatrix(0, 3) = "图书类型"
            MSFlexGrid1.TextMatrix(0, 4) = "作者"
            MSFlexGrid1.TextMatrix(0, 5) = "出版社"
            MSFlexGrid1.TextMatrix(0, 6) = "价格"
            MSFlexGrid1.TextMatrix(0, 7) = "数量"
        
        End With
        
        Select Case strss
            Case "10计算机"
                MSFlexGrid1.Clear
                introw = 1
                MSFlexGrid1.Rows = 42
                For inthigh = 1 To MSFlexGrid1.Rows - 1
                    MSFlexGrid1.RowHeight(inthigh) = 300
                Next
                bolTF = ms_db1(introw, "日化类")
            
            Exit Function
            
            Case "11数学"
                introw = 1
                MSFlexGrid1.Rows = 50
                For inthigh = 1 To MSFlexGrid1.Rows - 1
                MSFlexGrid1.RowHeight(inthigh) = 300
                Next
                bolTF = ms_db1(introw, "数学")
            
            Exit Function
            
            Case "12文学"
                MSFlexGrid1.Clear
                introw = 1
                MSFlexGrid1.Rows = 70
                For inthigh = 1 To MSFlexGrid1.Rows - 1
                MSFlexGrid1.RowHeight(inthigh) = 300
                Next
                bolTF = ms_db1(introw, "文学")
                
                Exit Function
                
            Case "图书类别"
                introw = 1
                MSFlexGrid1.Rows = 155
                For inthigh = 1 To MSFlexGrid1.Rows - 1
                MSFlexGrid1.RowHeight(inthigh) = 300
                Next
                Do While myRs.EOF = False
                
                MSFlexGrid1.TextMatrix(introw, 1) = myRs.Fields("图书编号").Value
                MSFlexGrid1.TextMatrix(introw, 2) = myRs.Fields("图书名称").Value
                MSFlexGrid1.TextMatrix(introw, 3) = myRs.Fields("图书类型").Value
                MSFlexGrid1.TextMatrix(introw, 4) = myRs.Fields("作者").Value
                MSFlexGrid1.TextMatrix(introw, 5) = myRs.Fields("出版社").Value
                MSFlexGrid1.TextMatrix(introw, 6) = myRs.Fields("价格").Value
                MSFlexGrid1.TextMatrix(introw, 7) = myRs.Fields("数量").Value
            
                myRs.MoveNext
                introw = introw + 1
                
                Loop
                myRs.MoveFirst
                Exit Function
            End Select
        ms_db = True
        
    End FunctionFunction ms_db1(introw As Integer, str As String) As Boolean
        Do While myRs.EOF = False
            
       
           ' On Error Resume Next        If (myRs.Fields("分类编号").Value = str) = True Then
            
            MSFlexGrid1.TextMatrix(introw, 1) = myRs.Fields("图书编号").Value
            MSFlexGrid1.TextMatrix(introw, 2) = myRs.Fields("图书名称").Value
            MSFlexGrid1.TextMatrix(introw, 3) = myRs.Fields("图书类型").Value
            MSFlexGrid1.TextMatrix(introw, 4) = myRs.Fields("作者").Value
            MSFlexGrid1.TextMatrix(introw, 5) = myRs.Fields("出版社").Value
            MSFlexGrid1.TextMatrix(introw, 6) = myRs.Fields("价格").Value
            MSFlexGrid1.TextMatrix(introw, 7) = myRs.Fields("数量").Value
            introw = introw + 1
            End If
            
            myRs.MoveNext
            
            If introw > MSFlexGrid1.Rows Then
            Exit Do
            End If
        Loop
        myRs.MoveFirst
        
        With MSFlexGrid1
        
        .RowHeight(0) = 500
        .ColWidth(0) = 300
        .ColWidth(1) = 1200
        .ColWidth(2) = 3000
        .ColWidth(3) = 1000
        .ColWidth(4) = 1500
        .ColWidth(5) = 1500
        .ColWidth(6) = 900
        .ColWidth(7) = 900
        
        MSFlexGrid1.TextMatrix(0, 1) = "图书编号"
        MSFlexGrid1.TextMatrix(0, 2) = "图书名称"
        MSFlexGrid1.TextMatrix(0, 3) = "图书类型"
        MSFlexGrid1.TextMatrix(0, 4) = "作者"
        MSFlexGrid1.TextMatrix(0, 5) = "出版社"
        MSFlexGrid1.TextMatrix(0, 6) = "价格"
        MSFlexGrid1.TextMatrix(0, 7) = "数量"    End With
    End Function
      

  2.   

    intX = 1 'strX数组下标
      '添加商品类型的子节点
      Do While DBRec.EOF = False
      strX(intX) = DBRec.Fields("分类名称")
      Set nodx = TreeView1.Nodes.Add("图书类别", tvwChild, "Ware" & intX, DBRec.Fields("分类编号") & strX(intX))
      intX = intX + 1
      ' -------------------------这点缺点东西,高手帮忙补上------------------------
      DBRec.MoveNext
      Loop
      DBRec.Close '关闭Cate表
      DBCn.Close '关闭数据库就是因为这点缺行代码~所以导致后面If (myRs.Fields("分类编号").Value = str) = True Then  出现3265错误希望朋友来改正~