2015-03-03 27 views
0

我有它的記錄源形式更新稱爲查詢qryProdSearch其SQL定義見下文基於搜索參數使用VBA生成:MS-訪問HOWTO刷新表單時,它的記錄源查詢由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中使用搜索框並刷新子表單,它可以正常工作。下面的例子。但限制是我不能分開單詞,並使用獨立於其位置的所有單詞進行搜索。

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

回答

0

您可能需要刷新QueryDefs:

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

然後:

Me!sfrmProdSearch.Form.Requery 
+0

都能跟得上仍然沒有刷新 – izzymo 2015-03-03 15:38:52

+0

然後,你可以只設置子窗體的記錄源的內容的iSQL。更容易。子表單將自動重新查詢。 – Gustav 2015-03-03 16:44:22