2017-05-24 60 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 & "*"""