2011-01-13 139 views
0

我在表单中使用LIKE查询来过滤表单的数据,我的表单中有文本框(“D_find”)。关键的火灾更新事件

我有下面的代码:

Private Sub D_find_AfterUpdate() 

    Dim fil 

    fil = Me.D_find 

    If fil = Null Then 
     fil = "" 
    End If 

    Me.Filter = "DeloN Like '" + fil + "*'" 

End Sub 

它正常工作,如果我按TAB或专注于形式的其他一些控制,但我需要立刻KEYUP文本框的事件之后应用过滤器,但我不能给它,因为如果我在D_find_keyup中使用此代码,我总是在中有 D_find为NULL,但在当前情况下,它总是不为null,除非它为空。

当前场景中存在的第二个问题:在应用AfterUpdate开启和过滤器后,D_find文本框中的文本颜色将变为白色,并且在我在此文本框(D_find)中键入somethin或剪切某些文本后,它会回滚为黑色。

-
对不起我的英文不好。

回答

0

如果文本仍然有焦点时,您可以使用:

NameOfControl.Text 

这将只包含输入的文本。但是,为什么必须立即应用过滤器,在Afterupdate中更安全,因为您可以确保输入了所有数据,并且可以将焦点设置回搜索控件。

EDIT重新评论

使用文本框,txtSearch,和一个列表框,lstCompanies下面的代码示出了以上:

Private Sub txtSearch_Change() 
s = "SELECT Key, Company " _ 
    & "FROM tblCompanies " _ 
    & "WHERE Company LIKE '*" _ 
    & Replace(Me.txtSearch.Text, "'", "''") & "*'" 

Me.lstCompanies.RowSource = s 
End Sub 

列表框返回字母被添加到txtSearch上逐渐减小列表。

+0

它工作正常,如果我使用AfterUpdate,但它“太迟”。我需要“现场过滤器”。如果我使用NameOfControl的Change或KeyUp事件,我总是对NameOfControl.Text或NameOfControl.Value有Null,如果在读取值之前使用NameOfControl.SetFocus,我也会收回Null。 – 2011-01-13 05:08:42