简单问题,散分了,up也有分噢

myhgyp 2002-11-21 03:12:25
我现在用treeview控件遇到了一点小问题。
1、我用的数据库为access,用ADO相连
2、库中的conttable表中只有一条数据,该表的第一个字段为索引字段,没有定义主键 (用来测试的)
3、定义一个记录集取表中记录,并插入treeview控件
4、出错信息为:集合中的关键字不唯一。
...全文
19 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystal_heart 2002-11-22
  • 打赏
  • 举报
回复
Private p_AdoCnn As New ADODB.Connection
Private p_AdoRS As New ADODB.Recordset

Public Function SetupMenu(ByRef vTreeView As TreeView) As Boolean
Dim o_Node As Node
Set o_Node = vTreeView.Nodes.Add(, , "root", "菜单内容设置", 1)
Set p_AdoRS = p_AdoCnn.Execute("select * from conttable ")
If Not p_AdoRS.EOF Then
With p_AdoRS
'.MoveLast
.MoveFirst
Do While Not .EOF
If Len(Trim(!contno)) = 1 Then
Set o_Node = vTreeView.Nodes.Add("root", tvwChild, "F" & !contno, !contno, 2)
Else
If Len(Trim(!contno)) = 2 Then
Set o_Node = vTreeView.Nodes.Add("root", tvwChild, "F" & Mid(Trim(!contno), 1, 1), Mid(Trim(!contno), 1, 1), 3)
Set o_Node = vTreeView.Nodes.Add("F" & Mid(Trim(p_AdoRS!contno), 1, 1), "S" & Mid(Trim(!contno), 2, 1), Mid(Trim(!contno), 2, 1), 2)
Else
Set o_Node = vTreeView.Nodes.Add("root", tvwChild, "F" & Mid(Trim(!contno), 1, 1), Mid(Trim(!contno), 1, 1), 3)
Set o_Node = vTreeView.Nodes.Add("F" & Mid(Trim(!contno), 1, 1), tvwChild, "S" & Mid(Trim(!contno), 2, 1), Mid(Trim(!contno), 2, 1), 3)
Set o_Node = vTreeView.Nodes.Add("S" & Mid(Trim(!contno), 2, 1), tvwChild, "T" & Mid(Trim(!contno), 3, 1), Mid(Trim(!contno), 3, 1), 2)
End If
End If
Loop
End With
End If
End Function
srxgs 2002-11-22
  • 打赏
  • 举报
回复
好象枚举有点问题

应该数据表有两个字段作为节点的参数:一个是key,一个是root


从根节点开始填充,循环填充每一个节点,每个节点的key=re.fields("root") & "\" & re.fields("key")
fishboyok 2002-11-22
  • 打赏
  • 举报
回复
我也不喜欢看别人的程序的,挺累的。up
litsnake1 2002-11-22
  • 打赏
  • 举报
回复
up
wxg4988 2002-11-22
  • 打赏
  • 举报
回复
Set nodx = tv_yuyin.Nodes.Add("F" & Mid(Trim(datars!contno), 1, 1), "S" & Mid(Trim(datars!contno), 2, 1), Mid(Trim(datars!contno), 2, 1), 2)这句话有问题吧
或者Set nodx = tv_yuyin.Nodes.Add("root", tvwChild, "F" & datars!contno, datars!contno, 2)
有问题,改一个地方吧
ZHHUAI791015 2002-11-21
  • 打赏
  • 举报
回复
单步调试看看!
看看记录
肯定是两个节点的关键字相同
guofu007 2002-11-21
  • 打赏
  • 举报
回复
我的格式是:
a00 一级
a00b00 二级
a00b00c00 三级
a00b00c00d00 四级
guofu007 2002-11-21
  • 打赏
  • 举报
回复
我用的是dao3.51,是书配盘的,你看看吧,(看别人的程序很麻烦的,所以我不会看你的程序了)
Tree.Nodes.Clear
While Not rs.EOF
Key = Trim$(rs!Key)
text = Trim(rs!Title)
Pos_t = InStr(Key, "f")
If Pos_t = 0 Then
Pos_t = InStr(Key, "e")
If Pos_t = 0 Then
Pos_t = InStr(Key, "d")
If Pos_t = 0 Then
Pos_t = InStr(Key, "c")
If Pos_t = 0 Then
Pos_t = InStr(Key, "b")
If Pos_t = 0 Then
Set nodex = Tree.Nodes.Add(, , Key, text)
nodex.Image = "nian"
nodex.EnsureVisible
Else
Set nodex = Tree.Nodes.Add(Left(Key, Pos_t - 1), 4, Key, text)
nodex.Image = "book"
End If
Else
Set nodex = Tree.Nodes.Add(Left(Key, Pos_t - 1), 4, Key, text)
nodex.Image = "file"
End If
Else
Set nodex = Tree.Nodes.Add(Left(Key, Pos_t - 1), 4, Key, text)
nodex.Image = "file"
End If
Else
Set nodex = Tree.Nodes.Add(Left(Key, Pos_t - 1), 4, Key, text)
nodex.Image = "file"
End If
Else
Set nodex = Tree.Nodes.Add(Left(Key, Pos_t - 1), 4, Key, text)
nodex.Image = "file"
End If
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
holydiablo 2002-11-21
  • 打赏
  • 举报
回复
肯定是Nodes在ADD的时候不小心有两个NODE的关键字算成一样了
myhgyp 2002-11-21
  • 打赏
  • 举报
回复
代码为:
Set nodx = tv_yuyin.Nodes.Add(, , "root", "菜单内容设置", 1)
Set datars = adoconmyh.Execute("select * from conttable ")
If Not datars.EOF Then
'datars.MoveLast
datars.MoveFirst
Do While Not datars.EOF
If Len(Trim(datars!contno)) = 1 Then
Set nodx = tv_yuyin.Nodes.Add("root", tvwChild, "F" & datars!contno, datars!contno, 2)
Else
If Len(Trim(datars!contno)) = 2 Then
Set nodx = tv_yuyin.Nodes.Add("root", tvwChild, "F" & Mid(Trim(datars!contno), 1, 1), Mid(Trim(datars!contno), 1, 1), 3)
Set nodx = tv_yuyin.Nodes.Add("F" & Mid(Trim(datars!contno), 1, 1), "S" & Mid(Trim(datars!contno), 2, 1), Mid(Trim(datars!contno), 2, 1), 2)
Else
Set nodx = tv_yuyin.Nodes.Add("root", tvwChild, "F" & Mid(Trim(datars!contno), 1, 1), Mid(Trim(datars!contno), 1, 1), 3)
Set nodx = tv_yuyin.Nodes.Add("F" & Mid(Trim(datars!contno), 1, 1), tvwChild, "S" & Mid(Trim(datars!contno), 2, 1), Mid(Trim(datars!contno), 2, 1), 3)
Set nodx = tv_yuyin.Nodes.Add("S" & Mid(Trim(datars!contno), 2, 1), tvwChild, "T" & Mid(Trim(datars!contno), 3, 1), Mid(Trim(datars!contno), 3, 1), 2)

End If
End If
Loop
End If
griefforyou 2002-11-21
  • 打赏
  • 举报
回复
代码看看

1,451

社区成员

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

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