VB6 Dictionary此键已与此集合的元素相关联

时间:2012-10-24 14:06:29

标签: collections dictionary vb6 runtime-error

这可能听起来有点奇怪,但在这里:

我的表单遍历每个客户(+ -10 000)并打开记录集以进行上次访问。由于优化不佳,我决定进行一次查询,我需要存储它以便于访问。

我决定拿一本字典,因为与数组不同,我可以使用键字符串(客户编号)进行搜索并获取我的项目(字符串:客户端的最后一次访问)。

Dim dict As Dictionary
Set dict = CreateObject("Scripting.Dictionary")


dict.RemoveAll
dict.CompareMode = TextCompare    ' BinaryCompare does not change anything
rsLastVisits.Open "SELECT CUST_NO, MAX(DATE) AS LAST FROM [...] GROUP BY CUST_NO", DBHandle, adOpenDynamic, adLockOptimistic
Do While Not rsLastVisits.EOF
   dict.Add rsLastVisits!CUST_NO, rsLastVisits!LAST
   rsLastVisits.MoveNext
Loop
rsLastVisits.Close

我收到运行时错误“此密钥已与此集合的元素相关联”。

这是有趣的部分开始的地方,因为我的查询没有返回重复项(我仔细检查过)。

调试时,这些是添加的值:

First Iteration:“0000000。”,“2012/05/27”

第二次迭代:“00000001”,“2011/06/14”错误尝试插入此行。

在即时窗口中,如果我写

dict.add "00000001", "2011/06/14"

添加没有任何问题。

如果我清除字典(dict.removeall),它将输入一个项目(无论什么条件,否),下一个项目将始终失败。如果我在即时窗口中手动输入(无变量),它就可以工作。

你们有没有想法?谢谢!

2 个答案:

答案 0 :(得分:3)

你的例子应该可以正常工作。我能想到的唯一问题是CUST_NO不是字符串。试试这个并检查它是否有所作为:

dict.Add CSTR(rsLastVisits!CUST_NO), CSTR(rsLastVisits!LAST)

修改

您可以发布CUST_NO的数据库定义吗?

答案 1 :(得分:0)

我找到了解决方法......

如果我改变

dict.Add rsLastVisits!CUST_NO, rsLastVisits!LAST

dict.Add "" & rsLastVisits!CUST_NO, "" & rsLastVisits!LAST

它有效......

虽然这没有任何意义,因为我的变量已经是Strings ..

我会把它留在这里作为“回答”。如果你们对Vb6内部有更好的了解的人可以向我解释发生了什么,我将不胜感激。

由于