在您键入时搜索,使用2个文本框搜索1列

时间:2015-11-20 08:02:02

标签: vba ms-access

我有以下内容:

  • 客户表中包含客户字段
  • 完全根据客户表格查询
  • 名为Form1
  • 的表单

TextBox中有两个TxtCustomer1,即TxtCustomer2Query

Like "*" & [forms]![Form1]![TxtCustomer1].[Text] & "*" And _ Like "*" & [forms]![Form1]![txtCustomer2].[Text] & "*" 中,在客户字段的标准内,我有以下代码:

Form1

我希望你能看到我的目标。我已将查询放在Sub1中作为子表单,名为TxtCustomer1

2个文本框TxtCustomer2OnChangeSub1个事件,重新查询TextBox

目前,2 Sub1已投放,可以过滤Form1中的TextBox子表单。

但问题出在这里:

我无法通过一起使用2 Sub1来过滤此1列,而是单独过滤掉。换句话说,在使用TxtCustomer1通过TxtCustomer2进行过滤后,我开始键入以使用Sub1进行过滤,此时它会重新启动TextCustomer2中的排序,并从teh bigeing开始反之亦然首先使用TextBox

好的,现在我已经能够用2 Like "*" & [forms]![Form1]![TxtCustomer1] & "*" And _ Like "*" & [forms]![Form1]![TxtCustomer2] & "*" s对一列进行排序,但是必须进行2次更改:

  • 更改1:使用"更新后"事件,而不是"在变化"事件
  • 更改2:使用我在上面发布的相同的确切代码,但没有[Text] Control属性,看起来如下所示。

    for (int i = 0; i<MAXSIZE; i++) { Node* n1 = new Node(); n1->SetData(randArray[i]); n1->SetIndex(i); n1->SetNext(NULL); //checks if NULL if (start == NULL) { start = n1; start->SetNext(NULL); } else { //inserts the values to the end of the node Node *p = start; while (p->GetNext() != NULL) { p = p->GetNext(); } p->SetNext(n1); } }

2 个答案:

答案 0 :(得分:0)

您现在使用的是什么,但在使用AfterUpdate事件时,它不再是“您键入时搜索”。

.Text属性仅在控件具有焦点时可用,但它也是唯一在键入时返回文本的属性 - .Value在离开控件之前不返回该属性。

所以我会这样做:

Private Sub TxtCustomer1_Dirty(Cancel As Integer)
    ' TxtCustomer1 is currently edited -> use its .Text property, and .Value for TxtCustomer2
    Call DoFilter(Me!TxtCustomer1.Text, Me!TxtCustomer2.Value)
End Sub

Private Sub TxtCustomer2_Dirty(Cancel As Integer)
    ' The other way around
    Call DoFilter(Me!TxtCustomer1.Value, Me!TxtCustomer2.Text)
End Sub

Private Sub DoFilter(ByVal Cust1 As Variant, ByVal Cust2 As Variant)

    Dim S As String
    S = "Customer Like '*" & Cust1 & "*' And Customer Like '*" & Cust2 & "*'"
    ' etc.

End Sub

答案 1 :(得分:-2)