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数据放入一个对象中,以便迭代它并将其数据更新到名为tbleftReceipts的表中 我已经关注了你的评论,请检查这是否是你说我需要放入对象时的意思: 修订的VBA代码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
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