2013-04-04 28 views
0

我在Microsoft Access 2007中創建了一個表格窗體。窗體上是一個文本框,我希望篩選窗體中的項目。Access 2007通過使用外鍵的窗體上的文本進行篩選

問題是表單中的一個字段是一個外鍵,它引用了一個擁有公司名稱的鏈接表。

當我運行下面的代碼,並在文本框中+回車,一個公司的名字,我只能夠搜索到對應的公司名稱數值:

Private Sub Text22_AfterUpdate() 
Dim mFilter As String 
Dim mQuery1 As String 

If IsNull(Me.Text22) Then 
    mQuery1 = "" 
Else 
    mQuery1 = Me.Text22 
End If 

mFilter = "[ID] Like ""*" & mQuery1 & "*""" 
mFilter = (mFilter + " OR ") & "[Supplier] Like ""*" & mQuery1 & "*""" 

temp = MsgBox(mFilter, vbOKOnly) 

Me.Filter = mFilter 
Me.FilterOn = True 
Me.Requery 
End Sub 

回答

0

最簡單的方法要解決此問題,請在鏈接到表格形式的查詢中包含要過濾的公司名稱。 喜歡的東西:

SELECT Invoice.ID, 
     Invoice.Amount, 
     Invoice.SupplierID, 
     Supplier.CompanyName 
FROM Invoice 
    INNER JOIN Supplier ON Supplier.ID = Invoice.SupplierID 

然後,如果你不想顯示的字段CompanyName,你總是可以隱藏在數據表形式列。
我通常隱藏報告中的ID,因爲我只用它們來識別數據庫內部的記錄並建立外部關係,所以我的用戶永遠不會顯示每個表的ID

如果您的表單連線不同,請修改您的問題,提供更多信息和屏幕截圖,以便我們可以更準確地回答您。

一個關於您所提供的代碼的小備註:
你要小心你的構建過濾器像你這樣的:如果用戶鍵入一個",您的過濾器的查詢將打破。你應該逃避用戶的輸入並對其進行一些消毒。
至少做一個mQuery1 = Replace(Text22, """", "")
同樣,如果用戶使用*開始/結束他的過濾器,查詢可能無法工作。

相關問題