treeview出现实时错误怎么回事

ningweidong 2010-06-04 07:26:03
实时错误35603无效的关键字

我想用递归生成一树。但是改不好。出现实时错误35603无效的关键字。错误定位在
Set NewNode = TreeView1.Nodes.Add("K_" & key, tvwChild, sKey, sName)可我并不知道哪里错了。

数据库
partno部门编号
partname部门名称
parentno父部门名称

Private Sub loadtree()
Set adoRec = adoConn.Execute("select * from part where ParentNo = '0'")
Dim str_Key As String, str_Key1 As String
Dim str_Name As String

TreeView1.Nodes.Clear
adoRec.MoveFirst
Do Until adoRec.EOF
str_Key = Trim(adoRec.Fields("PartNo"))
str_Name = adoRec.Fields("PartName")
AddRootNode "K_" & str_Key, str_Name
AddChildNode str_Key'错误出现在这个函数中
adoRec.MoveNext
Loop
adoRec.Close

End Sub
’添加头结点
Sub AddRootNode(str_Key As String, str_Name As String)
Dim ndNewNode As Node
Set ndNewNode = TreeView1.Nodes.Add(, tvwChild, str_Key, str_Name)
End Sub
'我本想将这个函数写成递归调,生成子树
Sub AddChildNode(key As String)
Dim rs As New ADODB.Recordset
Dim NewNode As Node
Dim sSql As String
Dim sKey As String
Dim sName As String

sSql = "select * from part where ParentNo = '" & key & "'"
If Not rs.State = adStateClosed Then rs.Close
rs.CursorLocation = adUseClient
rs.Open sSql, adoConn

If rs.RecordCount <> 0 Then
rs.MoveFirst
Do Until rs.EOF
sKey = Trim(rs.Fields("PartNo"))
sName = rs.Fields("PartName")
'就是这里提示实时错误35603无效的关键字,但我又不知道哪里有问题
Set NewNode = TreeView1.Nodes.Add("K_" & key, tvwChild, sKey, sName)
rs.MoveNext
Loop
End If
rs.Close
End Sub

请大家帮忙指出错误在哪里,应该怎么写?


...全文
84 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningweidong 2010-06-05
  • 打赏
  • 举报
回复
终于改好了。

今天上午,我跑到图书馆去查资料。回来改好了。其实基本上的思路都没有问题。

Option Explicit
'部门表结构
'partno部门编号
'partname部门名称
'parentno父部门编号
'节点的键值不能为纯数字,一定要用字母开头

Private adoConn As New ADODB.Connection
Private adoRec As New ADODB.Recordset

Private Sub Form_Load()
Dim sSql As String
Dim sNo As String
Dim sName As String
Dim nod As Node

adoConn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=ning;Data Source=MICROSOF-BCF166"
adoConn.Open

'查找父部门编号是0的部门,它们都是根部门
sSql = "SELECT * FROM part WHERE parentno = '0'"
If Not adoRec.State = adStateClosed Then adoRec.Close
adoRec.CursorLocation = adUseClient
adoRec.Open sSql, adoConn
If adoRec.RecordCount > 0 Then
adoRec.MoveFirst

Do While Not adoRec.EOF
sNo = adoRec.Fields(0)
sName = adoRec.Fields(1)
Set nod = TreeView1.Nodes.Add(, , sNo, sName) '添加根部门
addtree sNo '查找以该部门为根的所有部门
adoRec.MoveNext
Loop
End If
adoRec.Close
End Sub

'递归调用
'sFKey As String上部门的编号
Private Sub addtree(sFKey As String)
Dim rs As New ADODB.Recordset
Dim sSql As String
Dim sNo As String
Dim sName As String
Dim nod As Node

'查找以该部门为直接父部门的部门
sSql = "SELECT * FROM part WHERE parentno = '" & sFKey & "'"
If Not rs.State = adStateClosed Then rs.Close
rs.CursorLocation = adUseClient
rs.Open sSql, adoConn
If rs.RecordCount > 0 Then
rs.MoveFirst
Do While Not rs.EOF
sNo = rs.Fields(0)
sName = rs.Fields(1)
Set nod = TreeView1.Nodes.Add(sFKey, tvwChild, sNo, sName)
addtree sNo '递归调用,继续添加以本部门为根节点的部门
rs.MoveNext
Loop
End If
rs.Close
End Sub
chinaboyzyq 2010-06-05
  • 打赏
  • 举报
回复
你的代码中sKey不可以是纯数据串。
考虑用sKey = "a" & Trim(rs.Fields("PartNo"))

代码还有其它问题,你自己改吧。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧