gpt4 book ai didi

sql - 从 RecordSet 填充字典

转载 作者:行者123 更新时间:2023-12-02 06:58:55 25 4
gpt4 key购买 nike

我想知道是否有人可以帮助我。我正在尝试从 sql 表返回的记录集填充公共(public)字典。

一切似乎都很好,除了一个部分。我不知道它是否没有正确计算字典中的键数,或者它们没有被正确输入但是无论出于何种原因,当我尝试显示总计数时,它总是只返回 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

最佳答案

rs("Alias") 是一个 Field 对象。 Field 对象的默认属性是 Value,因此通常只需引用 Field 对象即可获得我们想要的 - 值。但是,字典可以存储对象(作为值或键),因此当您添加对象时,它实际上存储的是对象而不是默认属性。因此,在您的代码中,您将 rs("Alias") 添加为键,即对象而不是值。当您移动到下一条记录时,rs("Alias") 仍然是同一个对象——只是值发生了变化。因此,当您检查 key 是否存在时,它确实存在。您需要添加 Value 属性作为键。

aa_dd 的答案之所以有效,是因为它将值存储在变量中,然后将该值用作键,即不是 Field 对象。

另一种方法是显式使用 Field 对象的 Value 属性...

With UserList
If Not .Exists(rs("Alias").Value) Then
.Add Key:=rs("Alias").Value, Item:=USArr
End If
End With

关于sql - 从 RecordSet 填充字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com