Словарь + вопрос adodb - PullRequest
       15

Словарь + вопрос adodb

0 голосов
/ 27 апреля 2019

Я пытаюсь преобразовать результаты нескольких запросов в формат JSON для использования с REST API.

Предполагая, что запрос возвращает одну запись, поэтому я создаю объект Scripting.Dictionary, который содержит все имена полей как «ключи» и значения как «элементы».Следующим шагом является запуск подзапроса, который использует одну форму поля tb1 в качестве внешнего ключа для подзапроса.Затем он может вернуть две записи, поэтому в моем объекте Dictionary я хотел бы иметь дополнительное «поле» в словаре, которое содержит первую запись и следующее для второй записи.Наконец, этот большой объект словаря будет иметь простые поля (key: value) и другие элементы словаря, включенные в него.В конце я экспортирую его в 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") = вторая reocrd, а не первая 2. После второй итерации объект mct выглядит хорошо (несмотря на то, чтоof 1.), но при выходе из цикла все значения удаляются, поэтому, наконец, функция возвращает пустой объект (только ключи, а не элементы).

...