这可能听起来有点奇怪,但在这里:
我的表单遍历每个客户(+ -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),它将输入一个项目(无论什么条件,否),下一个项目将始终失败。如果我在即时窗口中手动输入(无变量),它就可以工作。
你们有没有想法?谢谢!
答案 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内部有更好的了解的人可以向我解释发生了什么,我将不胜感激。
由于