1

这可能听起来有点奇怪,但它是这样的:

我的表单遍历每个客户 (+-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

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

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

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

第一次迭代:“0000000.”、“2012/05/27”

第二次迭代:“00000001”、“2011/06/14” 错误试图插入这一行。

在即时窗口中,如果我写

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

它被添加没有任何问题。

如果我清除字典(dict.removeall),它会输入一项(不管是什么cust.no),下一项总是失败。如果我在即时窗口中手动输入(无变量),它就可以工作。

你们有什么想法吗?谢谢 !

4

2 回答 2

3

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

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

编辑:

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

于 2012-10-24T21:08:03.597 回答
0

我找到了解决方法...

如果我改变

dict.Add rsLastVisits!CUST_NO, rsLastVisits!LAST

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

有用...

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

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

谢谢

于 2012-10-24T14:41:40.433 回答