Access 2007,文本框搜索框,如右上方的Facebook名称搜索框

时间:2009-06-25 16:10:03

标签: database vba facebook ms-access-2007 search

所以基本上我有一个AddCompany表单,其中有一个文本框[CompanyName],我想在那里键入一个新的公司名称,但同时检查是否已经存在一个。

例如,假设我要输入Microsoft,当我输入M时,文本框会显示M的其他全部名称,然后一直继续,直到我键入完成输入microsoft。基本上jsut facebook搜索框如何工作。

如何在Microsoft Access 2007上实现此功能?它可能是在脏事件/更改/开关键事件???

请赐教!!

非常感谢!!!

3 个答案:

答案 0 :(得分:1)

使用Access向导可以完成相同的更简单的版本。如果您在表单设计中打开表单向导并单击组合框按钮并指向表单标题中的位置,您将自动选择创建一个组合框,该组合框将查找与列出的内容匹配的记录在下拉列表中。

然而,记住这些事情:

  1. 只有当您将表单绑定到整个表格时才会起作用(不建议用于大型记录集)

  2. 它创建的代码非常糟糕。

  3. 有很多方法可以解决这个问题。如果您愿意将表单绑定到整个表格,那么书签导航(与向导创建的代码一样)就可以了。但是,我建议您使用此代码而不是向导代码(假设组合框的绑定列包含您要查找的记录的PK ID):

      Private Sub MyComboBox_AfterUpdate()
        If IsNull(Me!MyComboBox) Then Exit Sub
        With Me.RecordsetClone
          .FindFirst "[MyID]=" & Me!MyCombBox
          If Not .NoMatch Then
             If Me.Dirty Then Me.Dirty = False
             Me.Bookmark = .Bookmark
          End If
        End With
      End Sub
    

    组合框需要使用SQL行源,它类似于:

      SELECT CompanyID, CompanyName FROM Company ORDER BY CompanyName
    

    并且您将组合框定义为包含2列,第一列是绑定列,并且您将第一列的宽度设置为0.向导将指导您完成此操作并为您设置。它唯一错误就是编写非常糟糕的代码。

    现在,如果您没有搜索唯一值,它会变得更复杂,您可能希望使用不同的方法。假设您有一个显示人员的表单,并且您希望查看特定公司的表单。在这种情况下,您可能希望按CompanyName进行过滤。在这种情况下,您可能希望应用过滤器,而不是执行上述的“查找”操作。在这种情况下,组合框的AfterUpdate事件将是这样的:

      Private Sub MyComboBox_AfterUpdate()
        If IsNull(Me!MyComboBox) Then Exit Sub
        Me.Filter = "[CompanyName]=" & Chr(34) & Me!MyComboBox & Chr(34)
        Me.FilterOn = True
      End Sub
    

    现在,在这种情况下,你的组合框只有一列,公司名称没有隐藏的ID字段,所以它有些不同。

    我不喜欢编程这种过滤UI提供的过滤(您可以右键单击CompanyName字段,然后在弹出的快捷菜单中输入您要过滤的公司名称,包括通配符,?和*)。此外,当您尝试在已有过滤器的情况下进行过滤时,它会变得混乱。如果您正在查看CitiCorp,然后由JP Morgan Chase过滤,您将无法获得任何结果。

    相反,我倾向于更改表单的Recordsource而不是应用过滤器。这意味着每次搜索都会为您提供新的结果集,并且是最有效的方法。它在返回到原始起点方面确实使事情变得复杂一些,但在设计合理的应用程序中,您可能首先应该只向用户呈现数据子集,因此这种方法存在问题“导致“是您需要解决的问题,以构建一个适当且高效的用户界面,仅检索用户真正需要的数据。

答案 1 :(得分:0)

一般来说,这个功能叫做自动完成(我也听说过你喜欢的类型)。有一篇文章提供了如何在Access on this page中执行此操作的示例。

答案 2 :(得分:0)

Access中的表单具有事件处理函数。那么你不能使用为这个功能添加到这些功能的自动完成代码吗?我在Google Books找到了一本书来讨论这个问题。

我可以想到以下代码需要添加到事件处理函数中:
1.找到现有潜在匹配的SQL 2.代码生成下拉框以显示潜在匹配