Json SDTime]=项目(“ESDTime”) rs![TerminalID]=项目(“TerminalID”) rs![InvoiceCode]=项目(“InvoiceCode”) rs![发票编号]=项目(“发票代码”) rs![财务代码]=项目(“财务代码”) rs![通话时间]=项目(“通话时间”) rs![操作员]=项目(“操作员”) rs![Taxlabel]=项目(“TaxItems”)(“Taxlabel”) rs![类别名称]=项目(“TaxItems”)(“类别名称”) rs![费率]=项目(“税项”)(“费率”) rs![税款金额]=项目(“税款项目”)(“税款金额”) rs![VerificationUrl]=项目(“出租车项目”)(“VerificationUrl”) rs![INVID]=Me.InvoiceID rs.更新 下一项 rs.Close 设置rs=无 Set db=Nothing 如果lngStatus小于0,则 '处理错误。 如果结束 '重置调制解调器控制线路。 lngStatus=CommSetLine(intPortID,LINE_RTS,False) lngStatus=CommSetLine(intPortID,LINE\U DTR,False) "密切沟通,。 调用CommClose(intPortID) 端接头

Json SDTime]=项目(“ESDTime”) rs![TerminalID]=项目(“TerminalID”) rs![InvoiceCode]=项目(“InvoiceCode”) rs![发票编号]=项目(“发票代码”) rs![财务代码]=项目(“财务代码”) rs![通话时间]=项目(“通话时间”) rs![操作员]=项目(“操作员”) rs![Taxlabel]=项目(“TaxItems”)(“Taxlabel”) rs![类别名称]=项目(“TaxItems”)(“类别名称”) rs![费率]=项目(“税项”)(“费率”) rs![税款金额]=项目(“税款项目”)(“税款金额”) rs![VerificationUrl]=项目(“出租车项目”)(“VerificationUrl”) rs![INVID]=Me.InvoiceID rs.更新 下一项 rs.Close 设置rs=无 Set db=Nothing 如果lngStatus小于0,则 '处理错误。 如果结束 '重置调制解调器控制线路。 lngStatus=CommSetLine(intPortID,LINE_RTS,False) lngStatus=CommSetLine(intPortID,LINE\U DTR,False) "密切沟通,。 调用CommClose(intPortID) 端接头,json,vba,ms-access,Json,Vba,Ms Access,这里的问题是如何将接收到的JSON数据放入一个对象中,以便迭代它并将其数据更新到名为tbleftReceipts的表中 我已经关注了你的评论,请检查这是否是你说我需要放入对象时的意思: 修订的VBA代码 Private Sub CmdConertJson_Click() On Error GoTo Err_Handler Dim db As DAO.Database Dim rs As DAO.Recordset Dim fld As DAO.Field Dim qdf As

这里的问题是如何将接收到的JSON数据放入一个对象中,以便迭代它并将其数据更新到名为tbleftReceipts的表中

我已经关注了你的评论,请检查这是否是你说我需要放入对象时的意思:

修订的VBA代码

Private Sub CmdConertJson_Click()
  On Error GoTo Err_Handler
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim fld As DAO.Field
  Dim qdf As DAO.QueryDef
  Dim prm As DAO.Parameter
  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 Tax As Collection
    Dim Z As Integer
    Dim i As Long
    Dim j As Long
    Dim t As Long
    Set transactions = New Collection
  Set db = CurrentDb
  Set qdf = db.QueryDefs("QryJson")
For Each prm In qdf.Parameters
    prm = Eval(prm.Name)
Next prm
Set rs = qdf.OpenRecordset(dbOpenSnapshot, dbSeeChanges)

Set qdf = Nothing
 rs.MoveFirst
    Do While Not rs.EOF
        Set transaction = New Dictionary
        transaction.Add "PosVendor", "Nector Prime Accounting Solutions"
        transaction.Add "PosSerialNumber", Me.CboEfds.Column(1)
        transaction.Add "IssueTime", Me.txtjsonDate
        transaction.Add "TransactionTyp", Me.TransactionType
        transaction.Add "PaymentMode", Me.PaymentMode
        transaction.Add "SaleType", Me.SalesType
        transaction.Add "LocalPurchaseOrder", Me.LocalPurchaseOrder
        transaction.Add "Cashier", Me.Cashier
        transaction.Add "BuyerTPIN", Me.BuyerTPIN
        transaction.Add "BuyerName", Me.BuyerName
        transaction.Add "BuyerTaxAccountName", Me.BuyerTaxAccountName
        transaction.Add "BuyerAddress", Me.BuyerAddress
        transaction.Add "BuyerTel", Me.BuyerTel
        transaction.Add "OriginalInvoiceCode", Me.OrignalInvoiceCode
        transaction.Add "OriginalInvoiceNumber", Me.OrignalInvoiceNumber

        '--- loop over all the items
        Dim itemCount As Long
        itemCount = Me.txtsquence
        Set items = New Collection
        For i = 1 To itemCount
            Set item = New Dictionary
            item.Add "ItemID", i
            item.Add "Description", DLookup("ProductName", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            item.Add "BarCode", DLookup("ProductID", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            item.Add "Quantity", DLookup("Quantity", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            item.Add "UnitPrice", DLookup("unitPrice", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            item.Add "Discount", DLookup("Discount", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            '--- loop over all the taxes
            Dim taxCount As Long
            taxCount = 1
            Set Tax = New Collection
            Dim strTaxes As Boolean
            strTaxes = DLookup("CGControl", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            '--- loop over all the invoices
            Dim invoiceCount As Long
            invoiceCount = 1
            Set invoices = New Collection
            For j = 1 To invoiceCount

                For t = 1 To taxCount
            Next t
            item.Add "Taxable", Tax

            Tax.Add DLookup("TaxClassA", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            Tax.Add DLookup("TaxClassB", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))

                item.Add "Total", DLookup("TotalAmount", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
                item.Add "IsTaxInclusive", strTaxes
                item.Add "RRP", DLookup("RRP", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))

            Next j


            items.Add item
        Next i
        transaction.Add "Items", items

        rs.MoveNext
    Loop

    root.Add "", transaction

    Dim json As String
    Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4
    Dim lngStatus As Long
    Dim strError  As String
    Dim strData   As String
    Dim lngSize As Long
    intPortID = 2
    ' Initialize Communications
    lngStatus = CommOpen(intPortID, "COM" & CStr(intPortID), _
        "baud=115200 parity=N data=8 stop=1")

    If lngStatus <> 0 Then
    ' Handle error.
        lngStatus = CommGetError(strError)
    MsgBox "COM Error: " & strError
    End If


    ' Set modem control lines.
    lngStatus = CommSetLine(intPortID, LINE_RTS, True)
    lngStatus = CommSetLine(intPortID, LINE_DTR, True)

    ' Write data to serial port.
    strData = JsonConverter.ConvertToJson(transaction, Whitespace:=3)
    lngSize = Len(strData)
    lngStatus = CommWrite(intPortID, strData)
    If lngStatus <> lngSize Then
    ' Handle error.
    End If
Exit_CmdConertJson_Click:
Exit Sub
Err_Handler:
Resume Exit_CmdConertJson_Click

' Read maximum of 64 bytes from serial port.

Dim JSONS As Object

    lngStatus = CommRead(intPortID, strData, 14400)

Set rs = db.OpenRecordset("tblEfdReceipts")
    If lngStatus > 0 Then
    ElseIf lngStatus < 0 Then
        ' Handle error.
        On Error Resume Next
    End If
        ' Process data.
  Set JSONS = JsonConverter.ParseJson(strData)
    Z = 2
  For Each item In JSONS
           With rs

            .AddNew
            rs![TPIN] = item("TPIN")
            rs![TaxpayerName] = item("TaxpayerName")
            rs![Address] = item("Address")
            rs![ESDTime] = item("ESDTime")
            rs![TerminalID] = item("TerminalID")
            rs![InvoiceCode] = item("InvoiceCode")
            rs![InvoiceNumber] = item("InvoiceCode")
            rs![FiscalCode] = item("FiscalCode")
            rs![TalkTime] = item("TalkTime")
            rs![Operator] = item("Operator")
            rs![Taxlabel] = item("TaxItems")("TaxLabel")
            rs![CategoryName] = item("TaxItems")("CategoryName")
            rs![Rate] = item("TaxItems")("Rate")
            rs![TaxAmount] = item("TaxItems")("TaxAmount")
            rs![VerificationUrl] = item("TaxItems")("VerificationUrl")
            rs![INVID] = Me.InvoiceID
            rs.Update
        End With
        Z = Z + 1
    Next

      rs.Close
      Set rs = Nothing
      Set db = Nothing
      Set JSONS = Nothing

    ' Reset modem control lines.
    lngStatus = CommSetLine(intPortID, LINE_RTS, False)
    lngStatus = CommSetLine(intPortID, LINE_DTR, False)

    ' Close communications.
    Call CommClose(intPortID)

End Sub
Private Sub CmdConertJson_Click()
关于错误转到错误处理程序
Dim数据库作为DAO.Database
Dim rs作为DAO.Recordset
模糊fld为刀场
将qdf设置为DAO.QueryDef
作为DAO.Parameter的Dim prm
作为字典的词根
Set root=新字典
Dim事务作为字典
作为集合的Dim事务
将项目作为字典
将项目设置为集合
字典
将发票作为收款
征收税款
将Z调整为整数
我想我会坚持多久
Dim j尽可能长
我没那么长
设置事务=新集合
Set db=CurrentDb
设置qdf=db.querydfs(“QryJson”)
对于qdf.参数中的每个prm
prm=评估(prm.名称)
下一个prm
Set rs=qdf.OpenRecordset(dbOpenSnapshot、dbSeeChanges)
设置qdf=无
先走一步
做而不做
设置事务=新字典
事务处理。添加“PosVendor”、“Nector Prime Accounting Solutions”
事务处理。添加“PosSerialNumber”,Me.CboEfds.列(1)
事务。添加“IssueTime”,Me.txtjsonDate
事务。添加“TransactionTyp”,Me.TransactionType
事务处理。添加“PaymentMode”,Me.PaymentMode
事务处理。添加“SaleType”,Me.SaleType
事务。添加“LocalPurchaseOrder”,Me.LocalPurchaseOrder
交易。添加“出纳”,Me。出纳
事务处理。添加“BuyerTPIN”,Me.BuyerTPIN
事务处理。添加“BuyerName”,Me.BuyerName
事务处理。添加“BuyerTaxAccountName”,Me.BuyerTaxAccountName
事务处理。添加“BuyerAddress”,Me.BuyerAddress
事务处理。添加“BuyerTel”,Me.BuyerTel
事务处理。添加“OriginalInvoiceCode”,Me.OriginalInvoiceCode
事务处理。添加“OriginalInvoiceNumber”,Me.OriginalInvoiceNumber
'---循环所有项目
将项目计数设为长
itemCount=Me.txtsquence
Set items=新集合
对于i=1到itemCount
Set item=新字典
项目。添加“项目ID”,i
项。添加“说明”、DLookup(“产品名称”、“QryJson”、“InvoiceID=“&Me.InvoiceID&”和ItemesID=“&CStr(i))
项目。添加“条形码”、DLookup(“ProductID”、“QryJson”、“InvoiceID=“&Me.InvoiceID&”和ItemesID=“&CStr(i))
项目。添加“数量”,DLookup(“数量”,“QryJson”,“InvoiceID=“&Me.InvoiceID&”和ItemesID=“&CStr(i))
项目。添加“单价”,DLookup(“单价”,“QryJson”,“发票ID=”&Me.InvoiceID&“和项目ID=”&CStr(i))
项目。添加“折扣”,DLookup(“折扣”,“QryJson”,“InvoiceID=“&Me.InvoiceID&”和ItemesID=“&CStr(i))
---把所有的税都循环一遍
长时间计算
taxCount=1
设置税收=新征收
作为布尔值的Dim strTaxes
strTaxes=DLookup(“CGControl”、“QryJson”、“InvoiceID=“&Me.InvoiceID&”和ItemesID=“&CStr(i))
“---把所有的发票都翻过来
按长度计算发票金额
发票计数=1
设置发票=新收款
对于j=1的发票计数
对于t=1到taxCount
下一个t
项目.添加“应税”,即税
Tax.添加DLookup(“TaxClassA”、“QryJson”、“InvoiceID=“&Me.InvoiceID&”和ItemesID=“&CStr(i))
Tax.Add DLookup(“TaxClassB”、“QryJson”、“InvoiceID=“&Me.InvoiceID&”和ItemesID=“&CStr(i))
项目。添加“总计”,DLookup(“总计金额”、“QryJson”、“发票ID=”&Me.InvoiceID&“和项目ID=”&CStr(i))
项目。添加“IsTaxInclusive”,标准表格
项目。添加“RRP”、DLookup(“RRP”、“QryJson”、“InvoiceID=“&Me.InvoiceID&”和ItemsId=“&CStr(i))
下一个j
项目。添加项目
接下来我
事务处理。添加“项目”,项目
下一个
环
根目录。添加“”,事务
将json设置为字符串
Dim intPortID为整数'Ex.1、2、3、4,用于COM1-COM4
模糊的状态和长的一样
朦胧如弦
将strData设置为字符串
变暗变长
intPortID=2
'初始化通信
lngStatus=CommOpen(输入端口,“COM”和CStr(输入端口)_
“波特率=115200奇偶校验=N数据=8停止=1”)
如果lngStatus为0,则
'处理错误。
lngStatus=通信错误(strError)
MsgBox“COM错误:”&strError
如果结束
'设置调制解调器控制线路。
lngStatus=CommSetLine(intPortID,LINE_RTS,True)
lngStatus=CommSetLine(intPortID,LINE\U DTR,真)
'将数据写入串行端口。
strData=JsonConverter.ConvertToJson(事务,空格:=3)
lngSize=Len(标准数据)
lngStatus=COMMWRITE
Private Sub CmdConertJson_Click()
  On Error GoTo Err_Handler
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim fld As DAO.Field
  Dim qdf As DAO.QueryDef
  Dim prm As DAO.Parameter
  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 Tax As Collection
    Dim Z As Integer
    Dim i As Long
    Dim j As Long
    Dim t As Long
    Set transactions = New Collection
  Set db = CurrentDb
  Set qdf = db.QueryDefs("QryJson")
For Each prm In qdf.Parameters
    prm = Eval(prm.Name)
Next prm
Set rs = qdf.OpenRecordset(dbOpenSnapshot, dbSeeChanges)

Set qdf = Nothing
 rs.MoveFirst
    Do While Not rs.EOF
        Set transaction = New Dictionary
        transaction.Add "PosVendor", "Nector Prime Accounting Solutions"
        transaction.Add "PosSerialNumber", Me.CboEfds.Column(1)
        transaction.Add "IssueTime", Me.txtjsonDate
        transaction.Add "TransactionTyp", Me.TransactionType
        transaction.Add "PaymentMode", Me.PaymentMode
        transaction.Add "SaleType", Me.SalesType
        transaction.Add "LocalPurchaseOrder", Me.LocalPurchaseOrder
        transaction.Add "Cashier", Me.Cashier
        transaction.Add "BuyerTPIN", Me.BuyerTPIN
        transaction.Add "BuyerName", Me.BuyerName
        transaction.Add "BuyerTaxAccountName", Me.BuyerTaxAccountName
        transaction.Add "BuyerAddress", Me.BuyerAddress
        transaction.Add "BuyerTel", Me.BuyerTel
        transaction.Add "OriginalInvoiceCode", Me.OrignalInvoiceCode
        transaction.Add "OriginalInvoiceNumber", Me.OrignalInvoiceNumber

        '--- loop over all the items
        Dim itemCount As Long
        itemCount = Me.txtsquence
        Set items = New Collection
        For i = 1 To itemCount
            Set item = New Dictionary
            item.Add "ItemID", i
            item.Add "Description", DLookup("ProductName", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            item.Add "BarCode", DLookup("ProductID", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            item.Add "Quantity", DLookup("Quantity", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            item.Add "UnitPrice", DLookup("unitPrice", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            item.Add "Discount", DLookup("Discount", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            '--- loop over all the taxes
            Dim taxCount As Long
            taxCount = 1
            Set Tax = New Collection
            Dim strTaxes As Boolean
            strTaxes = DLookup("CGControl", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            '--- loop over all the invoices
            Dim invoiceCount As Long
            invoiceCount = 1
            Set invoices = New Collection
            For j = 1 To invoiceCount

                For t = 1 To taxCount
            Next t
            item.Add "Taxable", Tax

            Tax.Add DLookup("TaxClassA", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
            Tax.Add DLookup("TaxClassB", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))

                item.Add "Total", DLookup("TotalAmount", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))
                item.Add "IsTaxInclusive", strTaxes
                item.Add "RRP", DLookup("RRP", "QryJson", "InvoiceID =" & Me.InvoiceID & " AND ItemesID =" & CStr(i))

            Next j


            items.Add item
        Next i
        transaction.Add "Items", items

        rs.MoveNext
    Loop

    root.Add "", transaction

    Dim json As String
    Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4
    Dim lngStatus As Long
    Dim strError  As String
    Dim strData   As String
    Dim lngSize As Long
    intPortID = 2
    ' Initialize Communications
    lngStatus = CommOpen(intPortID, "COM" & CStr(intPortID), _
        "baud=115200 parity=N data=8 stop=1")

    If lngStatus <> 0 Then
    ' Handle error.
        lngStatus = CommGetError(strError)
    MsgBox "COM Error: " & strError
    End If


    ' Set modem control lines.
    lngStatus = CommSetLine(intPortID, LINE_RTS, True)
    lngStatus = CommSetLine(intPortID, LINE_DTR, True)

    ' Write data to serial port.
    strData = JsonConverter.ConvertToJson(transaction, Whitespace:=3)
    lngSize = Len(strData)
    lngStatus = CommWrite(intPortID, strData)
    If lngStatus <> lngSize Then
    ' Handle error.
    End If
Exit_CmdConertJson_Click:
Exit Sub
Err_Handler:
Resume Exit_CmdConertJson_Click

' Read maximum of 64 bytes from serial port.

Dim JSONS As Object

    lngStatus = CommRead(intPortID, strData, 14400)

Set rs = db.OpenRecordset("tblEfdReceipts")
    If lngStatus > 0 Then
    ElseIf lngStatus < 0 Then
        ' Handle error.
        On Error Resume Next
    End If
        ' Process data.
  Set JSONS = JsonConverter.ParseJson(strData)
    Z = 2
  For Each item In JSONS
           With rs

            .AddNew
            rs![TPIN] = item("TPIN")
            rs![TaxpayerName] = item("TaxpayerName")
            rs![Address] = item("Address")
            rs![ESDTime] = item("ESDTime")
            rs![TerminalID] = item("TerminalID")
            rs![InvoiceCode] = item("InvoiceCode")
            rs![InvoiceNumber] = item("InvoiceCode")
            rs![FiscalCode] = item("FiscalCode")
            rs![TalkTime] = item("TalkTime")
            rs![Operator] = item("Operator")
            rs![Taxlabel] = item("TaxItems")("TaxLabel")
            rs![CategoryName] = item("TaxItems")("CategoryName")
            rs![Rate] = item("TaxItems")("Rate")
            rs![TaxAmount] = item("TaxItems")("TaxAmount")
            rs![VerificationUrl] = item("TaxItems")("VerificationUrl")
            rs![INVID] = Me.InvoiceID
            rs.Update
        End With
        Z = Z + 1
    Next

      rs.Close
      Set rs = Nothing
      Set db = Nothing
      Set JSONS = Nothing

    ' Reset modem control lines.
    lngStatus = CommSetLine(intPortID, LINE_RTS, False)
    lngStatus = CommSetLine(intPortID, LINE_DTR, False)

    ' Close communications.
    Call CommClose(intPortID)

End Sub