大家好!
直到今天整整一天,我都一直在想这个问题,但我一直没有找到任何答案,因此,感谢您的帮助。
我有的:
RegExp接受两个值作为输入:字符串(从表中获取)和模式(从表单中获取)。RegExp返回一个布尔值,该布尔值又使查询结果变稀。
该功能可以正常工作,并且符合预期,但是,只有当用户填写文本字段时,才会出现这种情况。如果将该字段留空,则不会返回任何结果(在这种情况下,甚至不会调用该函数)。
因此,查询中的特定语句如下所示:
... AND (RegExp(tblRole.Description,Trim([Forms]![frmFindRole]![txtRegExp]))<>False) AND ...
(总而言之,用户在文本字段中输入一个值,该值将修剪掉前导空格和尾随空格,将其转换为VBA模块内的正则表达式,然后根据函数返回的布尔值过滤查询结果)。
此表单上有许多控件,在我添加txtRegExp文本字段之前,它们已经起作用。现在,查询仅在填写txtRegExp时返回结果,我不知道为什么。我尝试添加更多检查,但是查询已经太复杂了,但是我没有成功。
如果需要其他代码示例才能做出答案,我明天就可以提供它们。
先感谢您。
PS Nz会帮忙吗?如果是,那么我将如何使用它?
根据您在评论中给出的一些解释
假设这是在KeyUp事件上触发的代码:
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Requery
End Sub
将表单记录源的默认SQL存储在局部变量中的某个位置。在此示例中,我认为您将其存储在SQLdefault
字符串中。
在重新查询之前,请检查文本框是否为空,如果是,则相应地更改表单的记录源SQL:
private SQLdefault as string
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Dim SQL As String
If Nz(txtRegExp, "") = "" Then
SQL = SQLdefault
SQL = Replace(SQL, "AND (RegExp(tblRole.Description,Trim([Forms]![frmFindRole]![txtRegExp]))<>False)", "")
Me.RecordSource = SQL ' Normally this is enought to requery, if not uncomment below
'Me.Requery
Else
Me.RecordSource = SQLdefault ' Normally this is enought to requery, if not uncomment below
' Me.Requery
End If
End Sub
在此示例中,我只删除了包含以下内容的SQL部分:
AND (RegExp(tblRole.Description,Trim([Forms]![frmFindRole]![txtRegExp]))<>False)
如果不正确,请以其他方式替换。
显然,这不是最优雅的解决方案,但是很难提供您所展示的最佳解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句