2017-05-24 58 views
3

我有一個從Microsoft Access與文本框(下面的名稱是TextSerial)。我希望用戶能夠輸入一個字符串並讓它顯示子表單中的所有匹配記錄。下面是我的代碼,但它不起作用(沒有記錄出現)。MS Access vb代碼來搜索字符串(使用LIKE)語句

Private Sub TextSerial_Enter() 
Dim myEquipment As String 
myEquipment = "Select * from tblEquipment where ([Serial] Like '% " & Me.TextSerial & " %')" 
Me.tblEquipment_subform1.Form.RecordSource = myEquipment 
Me.tblEquipment_subform1.Form.Requery 
End Sub 

我有一種感覺,它是與報價(」 VS「)的順序,但我一直沒能找到答案。我希望用戶只能夠進入字符串的一部分(這就是爲什麼我使用的一樣,而不是=)謝謝

+0

使用'Parameters',那麼你可以使用''% – Sami

+0

@Sami如果你正在調整的形式記錄源,而不是執行查詢,我不認爲你可以使用'parameters'。 –

回答

2

真正簡單的答案:! 噴氣/ ACE就像操作員使用*作爲通配符,不% 調整如下,它應該工作

myEquipment = "Select * from tblEquipment where ([Serial] Like '*" & Me.TextSerial & "*')" 
+0

啊!我不知道。但是,不,這仍然沒有帶來任何結果。有沒有更好的方法來調試爲什麼不呢? –

+1

啊,愚蠢的是,空間毀了它我想:'myEquipment =「從tblEquipment中選擇*([Serial] Like'*」&Me.TextSerial&「*')」'應該可以工作 –

+0

就是這樣!這樣可行!只有它不會更新。在更新子窗體之前,我必須返回並選擇文本框。有這個代碼運行在「輸入」一個壞主意? –

0

您需要使用*而不是%作爲通配符並稍微更改格式。

myEquipment = "Select * from tblEquipment where ([Serial] Like '*" & Me.TextSerial & "*')" 
+0

看到我的答案。你的回答是錯誤地刪除了導致Me.TextSerial不被VB.Net處理的引號,從而破壞了功能。 –

+0

@ErikvonAsmuth是對的,它打破了功能。這會彈出一個窗口。它實際上工作 - 我可以搜索一個字符串,它會帶來相關的結果,但彈出式窗口不斷回來....這是做「輸入」一個壞主意?我應該做一個按鈕嗎? –

+1

@ErikvonAsmuth編輯。我其實並不是想要改變引號,我只關注'*'並刪除文本兩邊的空格。 – TDolph

3

我注意到了兩件事。首先,您可以使用雙引號作爲字符轉義(即「他說」「您好。」「」「將輸出字符串:He said "Hello")。

其次,在通配符和文本之間的查詢中有一個空格。我不知道這是否是有意的,但這意味着如果您在字段中搜索字符串,例如ABC123,您實際上不會得到結果,因爲多餘的空格是該記錄中不存在的字符。

看看這些簡單的修改是否能解決您的問題。

myEquipment = "Select * from tblEquipment where [Serial] Like ""*" & Me.TextSerial & "*"""