MS-Access如何在VBA更新其RecordSource查询时刷新表单

时间:2015-03-03 07:53:26

标签: vba ms-access

我有一个表单,其记录源是一个名为qryProdSearch的查询,其SQL是根据下面定义的搜索参数使用VBA生成的:

以下代码的作用是将文本搜索框拆分为数组中的多个项目,以便我可以像Google搜索一样同时搜索所有这些项目。

iSQL = "SELECT tblProduct.ProductID, tblProduct.ProdDescription, tblProduct.Brand, tblProduct.ShortCode, tblProduct.BarCode, tblProduct.MRP, tblProduct.Discount, tblProduct.TaxRate, tblProduct.LandingCost, tblProduct.MarketPrice From tblProduct WHERE ((([ShortCode] & ' ' & [Brand] & ' ' & [ProdDescription] & ' ' & [BarCode]) Like '*"
If Nz(Me.txtSearch, "") = "" Then
    iSQL = "SELECT tblProduct.ProductID, tblProduct.ProdDescription, tblProduct.Brand, tblProduct.ShortCode, tblProduct.BarCode, tblProduct.MRP, tblProduct.Discount, tblProduct.TaxRate, tblProduct.LandingCost, tblProduct.MarketPrice From tblProduct"
    Exit Sub
Else
    iArray = Split(Me.txtSearch, " ")
End If

If UBound(iArray) = 0 Then
        iSQL = iSQL & Me.txtSearch & "*'));"
    Else
        iSQL = iSQL & iArray(0) & "*'"
        For i = LBound(iArray) To UBound(iArray)
            iSQL = iSQL & " And  ([ShortCode] & ' ' & [Brand] & ' ' & [ProdDescription] & ' ' & [BarCode]) Like '*" & iArray(i) & "*'"
        Next i
        iSQL = iSQL & "));"
End If

CurrentDb.QueryDefs("qryProdSearch").SQL = iSQL

这很好用。 但是,无论我尝试什么,直到我重新打开表单,使用此查询的子表单都不会刷新。我尝试过以下方法:

Me.sfrmProdSearch.Requery
Me.sfrmProdSearch.Form.Requery
Me.sfrmProdSearch.Form.Refresh
Me.Form.Requery
Me.Form.Refresh

欢迎任何建议。底线我不想重新打开表单,但我想让它刷新,以便子表单显示过滤的内容

如果我在SubForm的RecordSource中直接使用Searchbox并刷新子表单,它可以正常工作。以下示例。但是限制是我不能分割单词并使用与其位置无关的所有单词进行搜索。

WHERE ((([ShortCode] & ' ' & [Brand] & ' ' & [ProdDescription] & ' ' & [BarCode]) Like "*" & [Forms]![frmProdSearch]![txtSearch] & "*"));

1 个答案:

答案 0 :(得分:0)

您可能需要刷新QueryDefs:

CurrentDb.QueryDefs("qryProdSearch").SQL = iSQL
CurrentDb.QueryDefs.Refresh

然后:

Me!sfrmProdSearch.Form.Requery