Как загрузить все поля в подчиненной форме, чтобы быть частью строки Json в Ms Access VBA - PullRequest
1 голос
/ 09 октября 2019

Я хочу, чтобы все данные в открытой подчиненной форме были частью моей строки JSON. В настоящее время выбран только первый ряд. Я хочу, чтобы все текущие строки были выбраны после нажатия кнопки save.

Данные родительской формы правильно выбраны, это только эта часть в подчиненной форме, которая является неполной: она выбирает только первую строкуданные, данные второго ряда через последний не извлекаются.

Я хочу, чтобы первый ряд данных до последнего был выбран после нажатия кнопки save в подчиненной форме, называемой [sfrmInvoicedetails Subform]

Private Sub CmdSales_Click()

    Dim rs As Recordset
    Dim foo As New Dictionary
    Set foo = New Dictionary

    Dim Noor As Dictionary
    Set Noor = New Dictionary

    Dim hoo As New Collection
    Dim goo As New Dictionary
    Set goo = New Dictionary

    Dim Zoo As New Dictionary
    Set Zoo = New Dictionary

    Dim Koo As New Collection
    Dim Too As New Collection

    Set rs = Me.[sfrmInvoicedetails Subform].Form.RecordsetClone

    With rs
        Do While Not .EOF
        'Do Something
        .MoveNext
        Loop
    End With

    Set rs = Nothing
    With foo
        .Add "PosSerialNumber", Me.INV
        .Add "IssueTime", Me.InvoiceDate
        .Add "Customer", Me.Customer.Column(1)
        .Add "TransactionTyp", 0
        .Add "PaymentMode", 0
        .Add "SaleType", 0
        .Add "Items", Koo
     Koo.Add Noor
     Noor.Add "ItemID", 1
     Noor.Add "Description", Forms!frmInvoice![sfrmInvoicedetails Subform]!Description.Column(1)
     Noor.Add "BarCode", "4589630036"
     Noor.Add "Quantity", Forms!frmInvoice![sfrmInvoicedetails Subform]!Qty
     Noor.Add "UnitPrice", Forms!frmInvoice![sfrmInvoicedetails Subform]!UnitPrice
     Noor.Add "Discount", Forms!frmInvoice![sfrmInvoicedetails Subform]!Discount
     Noor.Add "Taxable", hoo
     hoo.Add Forms!frmInvoice![sfrmInvoicedetails Subform]!Taxables
     Noor.Add "Total", 120
     Noor.Add "IsTaxInclusive", Forms!frmInvoice![sfrmInvoicedetails Subform]!Inclusive
     Noor.Add "RRP", Forms!frmInvoice![sfrmInvoicedetails Subform]!RRP
     End With

     Dim member As Variant
     For Each member In foo

     Next

     MsgBox JsonConverter.ConvertToJson(foo, Whitespace:=3), vbOKOnly, "Audited by Chris H"
End Sub

Полные строки данных, выбранные из набора записей подчиненной формы с именем [sfrmInvoicedetails Subform] и отображаемые в строке JSON

1 Ответ

0 голосов
/ 09 октября 2019

У вас проблема с вложением объектов, что может быть сложно. Пример ниже должен помочь. В этом ответе я создал полезное руководство , к которому я постоянно обращаюсь.

В качестве дополнительного примечания я настоятельно рекомендую использовать более подходящие имена для ваших переменных. Мало того, что я запутался в foo, Koo, Noor, and hoo`, но я могу гарантировать, что вы будете сбиты с толку через несколько месяцев, когда вам придется вернуться и сохранить / изменить свой код.

Option Compare Database
Option Explicit

Sub CreateJSON()
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset("Table1")

    Dim root As Dictionary
    Set root = New Dictionary

    Dim transaction As Dictionary
    Dim transactions As Collection
    Dim item As Dictionary
    Dim items As Collection
    Dim invoice As Dictionary
    Dim invoices As Collection

    Dim i As Long
    Dim j As Long
    Set transactions = New Collection

    rs.MoveFirst
    Do While Not rs.EOF
        Set transaction = New Dictionary
        transaction.Add "PosSerialNumber", rs!PosSerialNumber
        transaction.Add "IssueTime", rs!IssueTime
        transaction.Add "Customer", rs!Customer
        transaction.Add "TransactionTyp", 0
        transaction.Add "PaymentMode", 0
        transaction.Add "SaleType", 0

        '--- loop over all the items
        Dim itemCount As Long
        itemCount = 2
        Set items = New Collection
        For i = 1 To itemCount
            Set item = New Dictionary
            item.Add "ItemID", i
            item.Add "Description", "some description"
            item.Add "BarCode", "some barcode"
            item.Add "Quantity", "some quantity"
            item.Add "UnitPrice", "some unit price"
            item.Add "Discount", "some discount"

            '--- loop over all the invoices
            Dim invoiceCount As Long
            invoiceCount = 3
            Set invoices = New Collection
            For j = 1 To invoiceCount
                Set invoice = New Dictionary
                invoice.Add "Total", 120 + j
                invoice.Add "IsTaxInclusive", "of course it is"
                invoice.Add "RRP", "something about RRP"
                invoices.Add invoice
            Next j
            item.Add "Taxable", invoices
            items.Add item
        Next i
        transaction.Add "Items", items
        transactions.Add transaction
        rs.MoveNext
    Loop
    root.Add "JSON Created", Now()
    root.Add "Transactions", transactions

    Dim json As String
    json = JsonConverter.ConvertToJson(root, Whitespace:=3)
    Debug.Print json
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...