Я пытаюсь преобразовать результаты нескольких запросов в формат 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.), но при выходе из цикла все значения удаляются, поэтому, наконец, функция возвращает пустой объект (только ключи, а не элементы).