字典+ adodb问题

时间:2019-04-27 10:38:08

标签: access-vba adodb

我正在尝试将多个查询结果转换为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)。

0 个答案:

没有答案