G'day,大家。
我一整天都在反对这个问题,直到今天,我还没找到任何答案,所以我很感激你的帮助。
我有什么:
RegExp将两个值作为输入:string(从表中获取)和pattern(从表单中获取)。 RegExp返回一个布尔值,这反过来会使查询结果变得稀疏。
该功能完全正常并且符合预期,但这只是用户填写文本字段时的情况。如果该字段留空,则不返回任何结果(如果是这种情况,则该函数甚至不会被调用)。
所以这是查询中的特定语句:
... AND (RegExp(tblRole.Description,Trim([Forms]![frmFindRole]![txtRegExp]))<>False) AND ...
(基本上,总结一下,用户在文本字段中键入值,将前导和尾随空格修剪掉,转换为VBA模块内的正则表达式,然后根据什么布尔值对查询结果进行过滤函数返回)。
此表单上有许多控件,在我添加txtRegExp文本字段之前,它们有效。现在,如果填写txtRegExp,查询只返回结果,我不知道为什么。我已经尝试添加更多检查,但查询已经太复杂了,我还没有成功。
如果要求提供其他代码示例,我明天就可以提供。
提前谢谢。
P.S。 Nz会有帮助吗?如果是,那我将如何使用呢?
答案 0 :(得分:0)
基于您在评论中提供的一些解释
假设这是在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)
如果不正确,请用别的东西替换它。
这显然不是最优雅的解决方案,但很难为您提供最佳解决方案。
答案 1 :(得分:0)
我已设法通过将initial query修改为include a check来获取txtRegExp的值。
我仍然不完全确定为什么它失败了一个空白的txtRegExp值。我有一种感觉,当提供NULL作为第二个参数时,RegExp函数以某种方式不会触发。
我非常感谢Thomas G提供的所有帮助。