我在想有没有人能帮我。我正在尝试从sql表返回的记录集中填充公共字典。
这一切似乎都很好,除了一个部分。我不知道它是否没有正确地计算字典中的键数,或者它们的输入不正确,但是无论出于什么原因,当我试图显示总计数时,它总是只带着1(应该在15左右)返回,并且只显示第一行的详细信息。
有人能帮忙吗?
Public UserList As New scripting.Dictionary
Sub UserDL()
Dim USList As Range
Dim USArr(0 To 11) As Variant
Call ConnecttoDB
Set Cmd = New adodb.Command: Set rs = New adodb.Recordset
With Cmd
.CommandTimeout = 30
.ActiveConnection = cn
.CommandText = "CSLL.DLUsers"
Set rs = .Execute
End With
With rs
If Not .BOF And Not .EOF Then
.MoveLast
.MoveFirst
While (Not .EOF)
For i = 1 To 11
USArr(i - 1) = rs(i)
Next i
With UserList
If Not .Exists(rs("Alias")) Then
.Add Key:=rs("Alias"), Item:=USArr
End If
End With
.MoveNext
Wend
End If
End With
IA = UserList.Items
Debug.Print UserList.Count & " Items in the dictionary"
For Each element In IA
For i = 0 To 10
Debug.Print element(i)
Next i
Next element
Set Cmd = Nothing: Set rs = Nothing ': Set UserList = Nothing
End Sub发布于 2014-09-04 16:53:10
将rs("Alias")存储在变量中,然后使用该变量作为键。
dim sKey as String
With UserList
sKey=rs("Alias")
If Not .Exists(sKey) Then
.Add sKey,USArr
End If
End With发布于 2016-11-02 00:15:57
rs(“别名”)是一个字段对象。字段对象的默认属性是Value,因此通常只引用Field对象就可以得到我们想要的值。但是,字典可以存储对象(作为值或键),因此当您添加对象时,它实际上存储的是对象而不是默认属性。因此,在代码中,添加rs("Alias")作为键,即对象而不是值。当您移动到下一个记录时,rs("Alias")仍然是相同的对象--只有值已经更改。因此,当您检查密钥是否存在时,它就会存在。您需要添加Value属性作为键。
aa_dd的答案之所以有效,是因为它将值存储在变量中,然后使用该值作为键,即不使用Field对象。
另一种方法是显式地使用字段对象的Value属性。
With UserList
If Not .Exists(rs("Alias").Value) Then
.Add Key:=rs("Alias").Value, Item:=USArr
End If
End Withhttps://stackoverflow.com/questions/25670687
复制相似问题