首先我说下我的软件,就是treeview从数据库中间提取出数据到treeview中,然后点击后在右边的richtextbox里面显示,但是现在遇到的问题就是:首先看下我的数据库:
这就是数据库Type表中ID列是Content表中Content_Type列的外键约束,同时要注意下,Content表中有几个记录的ID直接是从27开始的,我的软件运行界面如下:,可以看到,我点击了记录1后,在右边没有显示任何数据,下面是我的程序代码
node——click事件Private Sub tvList_NodeClick(ByVal node As MSComctlLib.node)
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset '主要获取父节点的属性
Dim rs1 As New ADODB.Recordset
Dim mm  As String
'下面是用来连接数据库的
conn.ConnectionString = "Driver={sql server};server=127.0.0.1;uid=sa;pwd=123;database=Pro_learn"
conn.ConnectionTimeout = 30
conn.Open
rs1.Open "select Content_Type,Content_Title from Content", conn, adOpenStatic, adLockReadOnly, adCmdText '这个主要适用来统计信息条数的
'下面选择相应的子结点的内容填充到textbox里面
For i = 0 To rs1.RecordCount - 1
'MsgBox (rs1.RecordCount - 1)
Select Case node.Key
Case "child02" & i
        j = tvList.SelectedItem.Parent.Index
        mm = (node.Index - 8)
        'MsgBox (mm)
       ' MsgBox (j)
        rs.Open "select Content_Main  from Content where ID='" + mm + "'", conn, adOpenStatic, adLockReadOnly, adCmdText
        If Not rs.EOF And Not rs.BOF Then
        txtContent.Text = rs.Fields("Content_Main")
        End If
End Select
Next i
End Sub下面是添加数据代码Private Sub cmdOK_Click()
Dim conn As New ADODB.Connection
Dim sqlCap As String
conn.ConnectionString = "Driver={sql server};server=127.0.0.1;uid=sa;pwd=123;database=Pro_learn"
conn.Open
'rs.Open "insert into [Content](Content_Title,Content_Main,Content_Type) values('" + txtTitle.Text + "','" + txtContent.Text + "','" + cbType.ListIndex + 1 + "')"
 sqlCap = "insert into [Content](Content_Title,Content_Main,Content_Type) values('" & txtTitle.Text & "','" & txtContent.Text & "','" & (cbType.ListIndex + 1) & "')"
conn.Execute (sqlCap)
MsgBox ("数据插入成功!")
End Sub不知道为什么,前面15条都可以正常显示,从id为27的开始都不能正常显示了,望高手指教一下,已经困扰我好长时间了

解决方案 »

  1.   

    不好意思,重新贴一次
    首先我说下我的软件,就是treeview从数据库中间提取出数据到treeview中,然后点击后在右边的richtextbox里面显示,但是现在遇到的问题就是:首先看下我的数据库:
    这就是数据库Type表中ID列是Content表中Content_Type列的外键约束,同时要注意下,Content表中有几个记录的ID直接是从 27开始的,我的软件运行界面如下:,可以看到,我点击了记录1后,在右边没有显示任何数据,下面是我的程序代码
    node——click事件Private   Sub   tvList_NodeClick(ByVal   node   As   MSComctlLib.node)
    Dim   conn   As   New   ADODB.Connection
    Dim   rs   As   New   ADODB.Recordset   '主要获取父节点的属性
    Dim   rs1   As   New   ADODB.Recordset
    Dim   mm     As   String
    '下面是用来连接数据库的
    conn.ConnectionString   =   "Driver={sql   server};server=127.0.0.1;uid=sa;pwd=123;database=Pro_learn "
    conn.ConnectionTimeout   =   30
    conn.Open
    rs1.Open   "select   Content_Type,Content_Title   from   Content ",   conn,   adOpenStatic,   adLockReadOnly,   adCmdText   '这个主要适用来统计信息条数的
    '下面选择相应的子结点的内容填充到textbox里面
    For   i   =   0   To   rs1.RecordCount   -   1
    'MsgBox   (rs1.RecordCount   -   1)
    Select   Case   node.Key
    Case   "child02 "   &   i
                    j   =   tvList.SelectedItem.Parent.Index
                    mm   =   (node.Index   -   8)
                    'MsgBox   (mm)
                  '   MsgBox   (j)
                    rs.Open   "select   Content_Main     from   Content   where   ID= ' "   +   mm   +   " ' ",   conn,   adOpenStatic,   adLockReadOnly,   adCmdText
                    If   Not   rs.EOF   And   Not   rs.BOF   Then
                    txtContent.Text   =   rs.Fields( "Content_Main ")
                    End   If
    End   Select
    Next   i
    End   Sub下面是添加数据代码Private   Sub   cmdOK_Click()
    Dim   conn   As   New   ADODB.Connection
    Dim   sqlCap   As   String
    conn.ConnectionString   =   "Driver={sql   server};server=127.0.0.1;uid=sa;pwd=123;database=Pro_learn "
    conn.Open
    'rs.Open   "insert   into   [Content](Content_Title,Content_Main,Content_Type)   values( ' "   +   txtTitle.Text   +   " ', ' "   +   txtContent.Text   +   " ', ' "   +   cbType.ListIndex   +   1   +   " ') "
      sqlCap   =   "insert   into   [Content](Content_Title,Content_Main,Content_Type)   values( ' "   &   txtTitle.Text   &   " ', ' "   &   txtContent.Text   &   " ', ' "   &   (cbType.ListIndex   +   1)   &   " ') "
    conn.Execute   (sqlCap)
    MsgBox   ( "数据插入成功! ")
    End   Sub不知道为什么,前面15条都可以正常显示,从id为27的开始都不能正常显示了,望高手指教一下,已经困扰我好长时间了
      

  2.   

    你确信是执行的 select   Content_Main     from   Content   where   ID=27
    吗?
      

  3.   

    刚才测试了一下,值是16,直接是在15的基础上面加1,本来想用if not rs.eof and rs.bof 
    rs.movenext的,但是也是没有用的,很奇怪
      

  4.   

    lihonggen0, 呵呵,看过你好多次了,厉害啊
      

  5.   

    为什么要用node.index?
    建议用node.Tag 来保存ID,这样程序就清晰多了
      

  6.   

    哦,能具体说下怎么利用吗,还有就是如果利用node.index的话,该怎么用
      

  7.   

    填充treeview的时候,把ID赋值给节点的tag属性,则在NodeClick的事件中就知道了当前节点的ID值。
      

  8.   

    很抱歉,我试了下,没成功,这是我的绑定treeview的代码tvList.Nodes.Clear
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset '主要获取父节点的属性
    Dim rs1 As New ADODB.Recordset '主要获取子结点的属性'下面是用来连接数据库的
    conn.ConnectionString = "Driver={sql server};server=127.0.0.1;uid=sa;pwd=123;database=Pro_learn"
    conn.ConnectionTimeout = 30
    conn.Open
    '定义两个记录集
    rs.Open "select VB_Type  from Type", conn, adOpenStatic, adLockReadOnly, adCmdText
    rs1.Open "select Content_Type,Content_Title from Content", conn, adOpenStatic, adLockReadOnly, adCmdText
    '定义树节点的属性
    tvList.ImageList = ImageList1
    tvList.LineStyle = tvwTreeLines
    tvList.Style = tvwTreelinesPlusMinusPictureText
    '循环添加父节点
    While Not rs.EOF
    For k = 0 To rs.RecordCount - 1
    Set nodx = tvList.Nodes.Add(, , "root" & k, rs.Fields("VB_Type"), 1)
    rs.MoveNext
    Next k
    Wend'循环添加子结点
    While Not rs1.EOF
    For i = 0 To rs1.RecordCount - 1
    'txtContent.Text = txtContent.Text + rs.Fields(0) + vbCrLf
    Set nodx = tvList.Nodes.Add("root" & rs1.Fields("Content_Type") - 1, tvwChild, "child02" & i, rs1.Fields("Content_Title"), 3)
    rs1.MoveNext
    Next i
    Wend
      

  9.   

    举例说吧,如果你点击1这个节点,那么触发NodeClick事件,你取他的tag属性为27所以说,你填充树的时候,要设置1这个节点的tag属性为27
      

  10.   

    哎,没办法,还是没有成功,我在form_load中令tvlist.tag=rs1.fields("ID"),然后在node_click中添加了mm=你node.tag也没有用,获得的是空值 
      

  11.   


    填充节点的tag属性
    Set nodx = tvList.Nodes.Add("root" & rs1.Fields("Content_Type") - 1, tvwChild, "child02" & i, rs1.Fields("Content_Title"), 3
    nodx.tag=rs1.Fields("id")
    node_click中: mm   = nodx.tag
      

  12.   

    恩,可以了,但是下面一个应改成mm=node.tag就行了,还有就是上面一个set nodex右边少了一个括号,再想问个问题就是关于窗体传值的方法,貌似在vb里面比较难,在c#里面可以利构造,getset,静态传值,在vb里面该如何来传值了,不好意思,李先生,呵呵·~~~麻烦了~~~~~~
      

  13.   

    可以用“模块”,在模块中添加一个全局变量如 
    public xx as 类型 然后 在窗体中给其赋值在另一窗体就方便读取到
      

  14.   

    恩,的确可以,但是要实现这样的功能,应该用什么方法呢?
    就是在子窗体中添加好文章后,点击发表后,就直接能在主窗体中加载,也就是发送一个form_load()的事件消息给主窗体,这个该如何来下手
      

  15.   

     
     ---------------Form 1 ----Private Sub Form_Load()Dim frm As New Form2
    Form2.MyName = "hello world"
    Form2.Show
    End Sub
     
     ---------------Form 2 ----
    Public MyName As StringPrivate Sub Form_Load()
        MsgBox MyName
    End Sub
      

  16.   

    ---------------Form 1 ---- Private Sub Form_Load()Dim frm As New Form2
    Form2.MyName = "hello world"
    Form2.Show 1MsgBox Form2.MyName
    End Sub---------------Form 2 ----  
     
    Public MyName As StringPrivate Sub Form_Load()
        MsgBox MyName
        MyName = "sfdds"
    End Sub
      

  17.   

    哦,呵呵·~~~这个我能看明白,但是由子窗体发送一个消息通知主窗体进行刷新操作(执行主窗体的form_load()()事件),貌似我现在还是摸不着头脑
      

  18.   


    --------Form 1------------
    Public Sub RefreshData()
        MsgBox "frm1"
    End SubPrivate Sub Command1_Click()
        Dim frm2 As New Form2
        frm2.Show
        End Sub
     
    --------Form 2------------
    Private Sub Command1_Click()
        Form1.RefreshData
    End Sub