MS Access VBA文本框搜索并提交

时间:2016-06-29 01:01:35

标签: vba ms-access

我正在制定销售点计划。我有一个带有标签的表单,主标签是我的注册部分。现在我有一个从属下拉框,可以在另一个列出了我所有产品的表中搜索产品,点击添加产品后,它会自动将其添加到子表单进行计算。我正在尝试为此过程添加条形码扫描程序选项。我有一个文本框,扫描仪将在其上提交产品代码并将其添加到子窗体,就像我的下拉菜单一样。我在查找另一个表上的产品代码时遇到问题,将其添加到子表单进行计算。以下是我的代码

Private Sub txtscan_AfterUpdate()
If (txtScan & vbNullString) = vbNullString Then Exit Sub
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("tblProducts", dbOpenDynaset)
rst.FindFirst "[ProductCode]='" & Me![txtScan] & "'"
If rst.NoMatch Then
    MsgBox "Sorry, no such record '" & txtScan & "' was found.", _
           vbOKOnly + vbInformation
Else
DoCmd.RunCommand acCmdSaveRecord
Me.sfrmSalesDetail.Form.Requery
Set rst = CurrentDb.OpenRecordset("tblSalesDetail", dbOpenDynaset)
Forms!frmMain.sfrmSalesDetail.Form.txtProductName.SetFocus
Me.cmdAddProduct.SetFocus
With rst
    .AddNew
    .Fields("SaleID") = Me.txtSaleID
    .Fields("ProdCategoryID") = Me.cboProductCategory
    .Fields("ProductID") = Me.cboProductID
    .Fields("ProductCode") = Me.cboProductID.Column(1)
    .Fields("ProductDesc") = Me.cboProductID.Column(2)
    .Fields("ProdColor") = Me.cboProductID.Column(3)
    .Fields("ProdSize") = Me.cboProductID.Column(4)
    .Fields("UPC") = Me.cboProductID.Column(5)
    .Fields("SalesPrice") = Me.cboProductID.Column(6)
    .Fields("QuantitySold") = 1
    .Fields("ItemExt") = 1 * Me.cboProductID.Column(6)
    .Fields("ItemTotal") = 1 * Me.cboProductID.Column(6)
    .Update
End With

Me.sfrmSalesDetail.Form.Requery
rst.Close
Set rst = Nothing

Me.sfrmItemsSaleAmount_NonInsurance.Requery
cmdCalculateOrderTotal_Click
DoCmd.RunCommand acCmdSaveRecord

' Me.Recordset.Bookmark = rs.Bookmark     万一     rst.Close     txtScan =空 结束子

1 个答案:

答案 0 :(得分:0)

考虑使用Domain aggregate family of functionsDLookUpDCount进行查找。无需打开记录集。因此,更改条件的If逻辑以使用DLookup。如果返回空答案,则使用Nz()以下。

If Nz(DLookUp("ProductCode", "tblProducts", "ProductCode='" & Me![txtScan] & "'")) = "" Then
    MsgBox "Sorry, no such record '" & txtScan & "' was found.", _
           vbOKOnly + vbInformation
Else
...

或者,使用DCount

If Nz(DCount("*", "tblProducts", "ProductCode='" & Me![txtScan] & "'")) = 0 Then
    MsgBox "Sorry, no such record '" & txtScan & "' was found.", _
           vbOKOnly + vbInformation
Else
...