Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Access 2007,文本框搜索框,如右上角的Facebook名称搜索框_Database_Vba_Facebook_Ms Access 2007_Search - Fatal编程技术网

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

Database Access 2007,文本框搜索框,如右上角的Facebook名称搜索框,database,vba,facebook,ms-access-2007,search,Database,Vba,Facebook,Ms Access 2007,Search,所以基本上我有一个AddCompany表单,其中有一个文本框[CompanyName],我想在其中输入一个新的公司名称,但同时检查是否有一个已经存在的公司名称 例如,假设我想键入Microsoft,当我键入M时,文本框会显示一大堆带有M的其他名称,然后一直持续到我键入完Microsoft为止。基本上了解facebook搜索框的工作原理 如何在Microsoft Access 2007上实现此功能??它可能是在on dirty事件/on change/on key down事件中吗 请开导我 非常

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

例如,假设我想键入Microsoft,当我键入M时,文本框会显示一大堆带有M的其他名称,然后一直持续到我键入完Microsoft为止。基本上了解facebook搜索框的工作原理

如何在Microsoft Access 2007上实现此功能??它可能是在on dirty事件/on change/on key down事件中吗

请开导我


非常感谢

一般来说,此功能称为自动完成(我也听说过按输入查找)。有一篇文章给出了如何在Access中执行此操作的示例。

一般来说,此功能称为自动完成(我也听说过键入时查找)。有一篇文章给出了如何在Access中执行此操作的示例。

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

但是,请记住以下几点:

  • 仅当您将表单绑定到整个表时,它才起作用(对于大型记录集,不建议这样做)

  • 它创建的代码糟糕透顶

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

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

      SELECT CompanyID, CompanyName FROM Company ORDER BY CompanyName
    
    您将组合框定义为有两列,第一列是绑定列,并且将第一列的宽度设置为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字段,所以它有些不同

    我不喜欢编程这种过滤,因为它是由Access UI提供的(您可以右键单击CompanyName字段,在弹出的快捷菜单中,键入要过滤的公司名称,包括通配符、?和*)。此外,当您尝试在已有过滤器的情况下进行过滤时,可能会感到困惑。如果你只看花旗,然后通过摩根大通过滤,你将一无所获


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

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

    但是,请记住以下几点:

  • 仅当您将表单绑定到整个表时,它才起作用(对于大型记录集,不建议这样做)

  • 它创建的代码糟糕透顶

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

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

      SELECT CompanyID, CompanyName FROM Company ORDER BY CompanyName
    
    您将组合框定义为有两列,第一列是绑定列,并且将第一列的宽度设置为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字段,所以它有些不同

    我不喜欢编程这种过滤,因为它是由Access UI提供的(您可以右键单击CompanyName字段,然后在弹出的快捷菜单中键入您需要的公司名称)