Having a weird time using the recordsetclone function. I am seeing issues where an Order Form is printed and the total is not correct, as the values used for printing is coming from the database. The problem is down to this code as far as I can see and have tested. I see that when multiple main Form records are open, this code doesn't properly update/save the curOrderTotal value in the database if there was a change of the dblsubTot. I see through testing the dblsubtot is correct, but it’s not putting into the database the value. Only does it when one Order is open perfectly. This code is run right before you print the Order to update any changes in the database that may have happened on the Order, ie changed a price of a line item.
Any ideas how to modify code this so that it always saves to the SQL database properly and reliably? Am I using recordsetclone function correctly? The main order form has two subforms on it.
Any help appreciated….thx
Alex
Expand|Select|Wrap|Line Numbers
- Sub cswUpdateOrder(strOrdNum As String)
- On Error GoTo Error_cswUpdateOrder
- ' cswUpdateOrder "OE10024-000017"
- Dim dblTaxTotal As Double
- Dim dblTaxTotalRate As Double
- Dim dblSubTot As Double
- Dim dblSubTotRate As Double
- Dim dblTaxCodeRate As Double
- Dim dblMHRTot As Double
- Dim strCriteria As String
- With Forms!frmOEOrder
- ' Set the Criteria for the Update.
- .RecordsetClone.FindFirst "strOrderNumber = """ & strOrdNum & """"
- dblTaxTotal = 0
- dblTaxTotalRate = 0
- dblSubTot = 0
- dblSubTotRate = 0
- dblTaxCodeRate = 0
- dblMHRTot = 0
- ' Update the !subDetail.Form.RecordsetClone Sales tax fields.
- strCriteria = "strOrderNumber = """ & .RecordsetClone!strOrderNumber & """"
- !subDetail.Form.RecordsetClone.FindFirst strCriteria
- Do Until !subDetail.Form.RecordsetClone.EOF
- !subDetail.Form.RecordsetClone.Edit
- ' Get the Labor
- dblMHRTot = dblMHRTot + (!subDetail.Form.RecordsetClone!dblManHoursRequired * !subDetail.Form.RecordsetClone!dblQtyOrdered)
- dblTaxCodeRate = Nz(!subDetail.Form.RecordsetClone!dblTaxCodeRate)
- ' Calculate the Tax
- If !strTransactionType = "RMA" Then
- !subDetail.Form.RecordsetClone!curSalesTax = ((!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyAllocated) - (!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyAllocated) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100)
- !subDetail.Form.RecordsetClone!curSalesTaxRate = ((!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyAllocated) - (!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyAllocated) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100)
- dblTaxTotal = dblTaxTotal + CStr(((!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyAllocated) - (!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyAllocated) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100))
- dblTaxTotalRate = dblTaxTotalRate + CStr(((!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyAllocated) - (!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyAllocated) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100))
- Else
- !subDetail.Form.RecordsetClone!curSalesTax = ((!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyOrdered) - (!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyOrdered) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100)
- !subDetail.Form.RecordsetClone!curSalesTaxRate = ((!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyOrdered) - (!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyOrdered) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100)
- dblTaxTotal = dblTaxTotal + CStr(((!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyOrdered) - (!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyOrdered) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100))
- dblTaxTotalRate = dblTaxTotalRate + CStr(((!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyOrdered) - (!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyOrdered) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100))
- End If
- !subDetail.Form.RecordsetClone.Update
- If !strTransactionType = "RMA" Then
- dblSubTot = dblSubTot + cswRoundAmount2(CStr((!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyAllocated) - (!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyAllocated) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)))
- dblSubTotRate = dblSubTotRate + cswRoundAmount2(CStr((!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyAllocated) - (!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyAllocated) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)))
- Else
- dblSubTot = dblSubTot + cswRoundAmount2(CStr((!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyOrdered) - (!subDetail.Form.RecordsetClone!curSalesPrice * !subDetail.Form.RecordsetClone!dblQtyOrdered) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)))
- dblSubTotRate = dblSubTotRate + cswRoundAmount2(CStr((!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyOrdered) - (!subDetail.Form.RecordsetClone!curSalesPriceRate * !subDetail.Form.RecordsetClone!dblQtyOrdered) * (!subDetail.Form.RecordsetClone!dblDiscount / 100)))
- End If
- !subDetail.Form.RecordsetClone.MoveNext
- Loop
- ' Calculate the totals for the Misc subform.
- !subMisc.Form.RecordsetClone.FindFirst strCriteria
- Do Until !subMisc.Form.RecordsetClone.EOF
- !subMisc.Form.RecordsetClone.Edit
- ' Get the Labor
- dblMHRTot = dblMHRTot + (!subMisc.Form.RecordsetClone!dblManHoursRequired * !subMisc.Form.RecordsetClone!dblQtyShipped)
- dblTaxCodeRate = Nz(!subMisc.Form.RecordsetClone!dblTaxCodeRate)
- ' Calculate the Tax
- !subMisc.Form.RecordsetClone!curSalesTax = ((!subMisc.Form.RecordsetClone!curSalesPrice * !subMisc.Form.RecordsetClone!dblQtyShipped) - (!subMisc.Form.RecordsetClone!curSalesPrice * !subMisc.Form.RecordsetClone!dblQtyShipped) * (!subMisc.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100)
- !subMisc.Form.RecordsetClone!curSalesTaxRate = ((!subMisc.Form.RecordsetClone!curSalesPriceRate * !subMisc.Form.RecordsetClone!dblQtyShipped) - (!subMisc.Form.RecordsetClone!curSalesPriceRate * !subMisc.Form.RecordsetClone!dblQtyShipped) * (!subMisc.Form.RecordsetClone!dblDiscount / 100)) * (dblTaxCodeRate / 100)
- dblTaxTotal = dblTaxTotal + (CStr((!subMisc.Form.RecordsetClone!curSalesPrice * !subMisc.Form.RecordsetClone!dblQtyShipped) - (!subMisc.Form.RecordsetClone!curSalesPrice * !subMisc.Form.RecordsetClone!dblQtyShipped) * (!subMisc.Form.RecordsetClone!dblDiscount / 100))) * (dblTaxCodeRate / 100)
- dblTaxTotalRate = dblTaxTotalRate + (CStr((!subMisc.Form.RecordsetClone!curSalesPriceRate * !subMisc.Form.RecordsetClone!dblQtyShipped) - (!subMisc.Form.RecordsetClone!curSalesPriceRate * !subMisc.Form.RecordsetClone!dblQtyShipped) * (!subMisc.Form.RecordsetClone!dblDiscount / 100))) * (dblTaxCodeRate / 100)
- !subMisc.Form.RecordsetClone.Update
- dblSubTot = dblSubTot + cswRoundAmount2(CStr((!subMisc.Form.RecordsetClone!curSalesPrice * !subMisc.Form.RecordsetClone!dblQtyShipped) - (!subMisc.Form.RecordsetClone!curSalesPrice * !subMisc.Form.RecordsetClone!dblQtyShipped) * (!subMisc.Form.RecordsetClone!dblDiscount / 100)))
- dblSubTotRate = dblSubTotRate + cswRoundAmount2(CStr((!subMisc.Form.RecordsetClone!curSalesPriceRate * !subMisc.Form.RecordsetClone!dblQtyShipped) - (!subMisc.Form.RecordsetClone!curSalesPriceRate * !subMisc.Form.RecordsetClone!dblQtyShipped) * (!subMisc.Form.RecordsetClone!dblDiscount / 100)))
- !subMisc.Form.RecordsetClone.MoveNext
- Loop
- .RecordsetClone.Edit
- ' Update Labor.
- .RecordsetClone("curMHRTotal") = cswRoundAmount2(dblMHRTot) * .RecordsetClone!curHourly
- .RecordsetClone!curMHRTax = .RecordsetClone("curMHRTotal")
- ' Update Freight Sales Tax.
- If IsNull(.RecordsetClone!curFreight) Or .RecordsetClone!curFreight = "" Then
- .RecordsetClone("curFreight") = 0
- End If
- ' Update Labor Sales Tax.
- If IsNull(.RecordsetClone!curMHRTotal) Or .RecordsetClone!curMHRTotal = "" Then
- .RecordsetClone("curMHRTotal") = 0
- End If
- ' Update the Total Sales Tax and Invoice Totals.
- .RecordsetClone("curSalesTax") = cswRoundAmount2((Nz(dblTaxTotal) + (Nz(Me!curFreight) * (Nz(Me!dblTaxFreightPercent) / 100)) + (Nz(Me!curMHRTotal) * (Nz(Me!dblTaxMHRPercent) / 100))))
- .RecordsetClone("curSalesTaxRate") = cswRoundAmount2((Nz(dblTaxTotalRate) + (Nz(Me!curFreight) * (Nz(Me!dblTaxFreightPercent) / 100)) + (Nz(Me!curMHRTotal) * (Nz(Me!dblTaxMHRPercent) / 100))))
- .RecordsetClone("curOrderTotal") = cswRoundAmount2(dblSubTot + Nz(.RecordsetClone!curSalesTax) + .RecordsetClone!curFreight + (.RecordsetClone!curMHRTotal))
- .RecordsetClone("curOrderTotalRate") = cswRoundAmount2(dblSubTotRate + (Nz(.RecordsetClone!curSalesTax) * .RecordsetClone!dblExchangeRate) + .RecordsetClone!curFreightRate + Nz(.RecordsetClone!curMHRTotal))
- .RecordsetClone.Update
- End With
- Exit_cswUpdateOrder:
- ' Close Recordsets and destroy object variables.
- Forms!frmOEOrder.RecordsetClone.Close
- Forms!frmOEOrder.subDetail.Form.RecordsetClone.Close
- Forms!frmOEOrder.subMisc.Form.RecordsetClone.Close
- Exit Sub
- Error_cswUpdateOrder:
- cswLogError Application.CurrentObjectName, "Error_cswUpdateOrder", Now, Err.Number, Err.Description
- Resume Next
- End Sub