读书人

请看小弟我的代码VB treeview 报错:关

发布时间: 2012-12-16 12:02:32 作者: rapoo

请看我的代码VB treeview 报错:关键字不唯一,求教,谢谢
Call con
Rs.Open "select * from [kf]", Cnn, 3, 3

Do While Not Rs.EOF
If Trim(add.xm.text) = Rs.Fields("name") And Trim(add.jsn.text) = Rs.Fields("pcsn") Then

MsgBox "要添加的客户已存在,请勿重复添加!", vbInformation, "系统提示!"
add.tianjia.Enabled = False
add.xiugai.Enabled = True
add.shanchu.Enabled = False
add.beifen.Enabled = False
add.huifu.Enabled = False
Rs.Close
Cnn.Close
Exit Sub
End If
Rs.MoveNext
Loop
Rs.AddNew
Rs.Fields("name") = Trim(add.xm.text)
Rs.Fields("tel") = Val(add.dh.text)
Rs.Fields("phone") = Val(add.Combo1.text)
Rs.Fields("addr") = Trim(add.zz.text)
Rs.Fields("lei") = Trim(add.Combo2.text)
Rs.Fields("xpai") = Trim(add.Combo3.text)
Rs.Fields("xxing") = Trim(add.px.text)
Rs.Fields("xsn") = Trim(add.psn.text)
Rs.Fields("xdate") = DT1.Value
Rs.Fields("xbx") = DT2.Value
Rs.Fields("bd") = Trim(add.Combo4.text)
Rs.Fields("zpai") = Trim(add.jp.text)
Rs.Fields("xing") = Trim(add.jx.text)
Rs.Fields("pcsn") = Trim(add.jsn.text)
Rs.Fields("fs") = Trim(add.Combo6.text)
Rs.Fields("sdate") = DT3.Value
Rs.Fields("bdate") = DT4.Value
Rs.Fields("luser") = Trim(add.ldy.text)
Rs.Fields("lchk") = Trim(add.shr.text)





Rs.Update


MsgBox "客户信息添加成功", vbCritical, "系统提示!"

Rs.Close
Cnn.Close
Set Rs = Nothing
Set Cnn = Nothing


call tree_change
------------------------------

Public Sub tree_change()
Call con


Dim key, text As String
Dim nod As Node
key = "客户名单"
text = "客户名单"
With main.TreeView1
Set node1 = .Nodes.add(, , key, text, 1)
End With
asing = "select * from [kf]"
Rs.Open asing, Cnn, 3, 3



Do While Not Rs.EOF
key = Trim(Rs.Fields("name").Value)

text = Trim(Rs.Fields("name").Value)
With main.TreeView1
Set node2 = .Nodes.add(node1.Index, tvwChild, key, text, 1)
End With

Rs.MoveNext
Loop '循环语句
Rs.Close '循环完后 就关闭记录集
Cnn.Close

With main.TreeView1
.HotTracking = True
For i = 1 To .Nodes.Count

.Nodes(i).Expanded = False
Next i

End With

Set Rs = Nothing
Set Cnn = Nothing




















End Sub





问题就出在调用tree_change 时关键字不唯一,不知道有什么办法能使关键字唯一,求教各位大哥,先谢谢了



[解决办法]
说明你数据库记录中用作Node的Key的字段有重复值啊.

这一般不是程序的错, 而是数据的错.

你可以在IDE中运行到错误时, 看一下出错语句的KEY的值, 然后到数据库看看到底是怎么回事.


[解决办法]

引用:
说明你数据库记录中用作Node的Key的字段有重复值啊.



这一般不是程序的错, 而是数据的错.

你可以在IDE中运行到错误时, 看一下出错语句的KEY的值, 然后到数据库看看到底是怎么回事.


---------------------------------------谢谢你啊,我需要的是解决方案,,只知道出错原因还是束手无策啊,我自己今天花了好几个小时来调试这个实在没办法了才来请教的,我一般都是自己先做,实在不行才来请教的啊
[解决办法]
key = Trim(Rs.Fields("name").Value)

该字段中存在重复的值(你可以打开数据表比对),作为Node的key属性值,最好使用数据表的主键字段,这样可以确保不存在重复值,如果主键为数据类型,你可以在字段之前添加一个或多个字符转换为文本串(Node的Key只能为文本类型)
[解决办法]
想办法坚持数据库内已有的数据,比如select * form [kf] order by name,
然后看看是不是存在2个以上的记录有相同的name.

另外:If Trim(add.xm.text) = Rs.Fields("name") And Trim(add.jsn.text) = Rs.Fields("pcsn")
看你意思是如果数据中存在name和pcsn是输入的值就决绝插入...这样肯定存在这样一种情况:
数据库有name是"123",pcsn是"123"的记录,下次输入的是name"123",但是pcsn是"234",你一样插入新记录了,这样数据就存在相同name的数据记录..

前面数据插入的逻辑有问题,所以后面用name作为key就出错.

[解决办法]
引用:
说明你数据库记录中用作Node的Key的字段有重复值啊.

这一般不是程序的错, 而是数据的错.

你可以在IDE中运行到错误时, 看一下出错语句的KEY的值, 然后到数据库看看到底是怎么回事.

老蔡说的正是
[解决办法]
pcsn应该是唯一的,name应允许重复. 因此:
判断客户是否已存在, If Trim(add.jsn.text) = Rs.Fields("pcsn") Then 就行了.
下面添加key的时候用这个pcsn , key = Trim(Rs.Fields("pcsn").Value)

[解决办法]
分明是程序逻辑错误,各位就没有发现?
程序里面的if出错了,逻辑是错误的,结果就是数据库里面可以存在name相同的记录.

'打开记录集
Rs.Open "select * from [kf]", Cnn, 3, 3
'循环处理所有记录
Do While Not Rs.EOF
'如果记录集的name字段=输入值 and 记录集pcsn字段=输入值 then 数据重复
'注意这里,如果name字段=输入值 但是pcsn字段<>输入值,就不显示数据重复,就去添加.
'结果是,name字段在数据库可以重复,后面用name作为key,怎能不错
If Trim(add.xm.text) = Rs.Fields("name") And Trim(add.jsn.text) = Rs.Fields("pcsn") Then
MsgBox "要添加的客户已存在,请勿重复添加!", vbInformation, "系统提示!"
....
Rs.Close
Cnn.Close
Exit Sub
End If
Rs.MoveNext
Loop
Rs.AddNew
....
Rs.Update
MsgBox "客户信息添加成功", vbCritical, "系统提示!"


[解决办法]
向高手学习了!
[解决办法]
谢谢大家帮助,我自己已经把问题解决了,我在创建节点前加了 treeview1.Nodes.Clear 就运行正常了
[解决办法]
来晚了,什么情况???老蔡
[解决办法]
好了就成...
不是交给客户的程序..那天客户不按规矩出牌那就有的吃了
[解决办法]
哈哈,我自己的电脑店用的程序

读书人网 >VB

热点推荐