我正在尝试将多个查询结果转换为JSON格式以与REST API一起使用。
假设该查询返回一条记录,那么我正在创建Scripting.Dictionary对象,该对象包含所有字段名称为“键”,值包含为“项”。下一步是运行子查询,该子查询使用一个字段形式tb1作为子查询的外键。然后它可以返回两个记录,因此在我的Dictionary对象中,我想在字典中有一个附加的“ field”,其中包含第一个记录,下一个用于第二个记录。最终,这个大的字典对象将具有简单的字段(键:值)以及此字典中包含的其他字典项。最后,我将其导出为JSON。
Public Function GetDctFromSQL(strsql As String, keyname As String, Optional prefix As String = "Obj") As Scripting.Dictionary
Dim rst As New ADODB.Recordset
Dim dct As New Scripting.Dictionary 'current object
Dim mct As New Scripting.Dictionary ' "master" object
Dim i As Integer
rst.Open strsql, CurrentProject.Connection, adOpenDynamic, adLockReadOnly, adCmdText
Set mct = Nothing
rst.MoveFirst
i = 1
Do While Not (rst.EOF)
Set dct = Nothing
For Each fld In rst.Fields
dct.Add fld.Name, rst(fld.Name)
Next
dct.Add "keyID", rst(keyname)
Debug.Print "simple record:" & JsonConverter.ConvertToJson(dct)
mct.Add prefix & i, dct
Debug.Print "master: " & JsonConverter.ConvertToJson(mct)
i = i + 1
rst.MoveNext
Loop
mct.Add "rCount", i - 1
Set GetDctFromSQL = mct
Debug.Print "result:" & JsonConverter.ConvertToJson(mct)
rst.Close
Set rst = Nothing
End Function
我发现了两个问题: 1.在do的第二次迭代中,当i = 2时,mct(“ Obj1”)=第二记录,而不是第一记录 2.在第二次迭代后,mct对象看起来不错(尽管为1),但是在退出循环时,所有值都被删除,因此最终函数返回空对象(只有Keys,没有Items)。