【问题标题】:Searching Subform搜索子表单
【发布时间】:2013-03-22 13:37:13
【问题描述】:

我们建立了一个数据库,其中包含一个主客户详细信息表单 - 其中有几个与客户访问的服务相关的子表单。我们无法搜索整个子表单字段,因为它只是搜索单个客户的记录,因为链接。

最好的搜索方式是什么?我在想也许在总机上有一个搜索选项,单击该选项后,用户可以选择一个表单,然后自行打开该表单。我该怎么做?

谢谢。

【问题讨论】:

    标签: database ms-access search subform


    【解决方案1】:

    我经常在我的许多表单中添加“子表单过滤器”。它通常是一个按钮,它会弹出一个对话框,其中包含“要搜索的字段”下拉菜单和一个用于搜索字符串的文本框。假设您有一个父表 [Student] 和一个相关的子表 [Awards]:

    [学生 ID] 数字(长整数)
    [AwardName] 文本(255)

    学生主窗体可以有一个子窗体显示学生获得的奖项。如果您想过滤学生记录以显示“数学奖”的收件人,那么要应用于 [Students] 表的过滤器将是

    [StudentID] IN (SELECT [StudentID] FROM [Awards] WHERE [AwardName]="Math Prize")
    

    对于子字符串搜索,要查找“本周运动员”、“年度女运动员”等的所有收件人,您可以构造一个过滤字符串,如

    [StudentID] IN (SELECT [StudentID] FROM [Awards] WHERE [AwardName] LIKE "*athlete*")
    

    【讨论】:

    • hmmm,大多数时候子表单中只有一条记录,因为每个客户端通常只访问一次服务。在子表单中有一个需要搜索的数字字段,但如果用户不在拥有此数字的客户的记录中,它会说没有结果 - 你的解决方案会解决这个问题吗?
    • 是的,这仍然有效,它会在过滤字符串中的 SELECT 查询上使用稍微不同的 WHERE 子句。假设 Awards 表有一个额外的列 [TimesAwarded],并且您想过滤学生记录以显示重复获奖者,您可以说 [StudentID] IN (SELECT [StudentID] FROM [Awards] WHERE [TimesAwarded]>1)
    • 好的,谢谢!我怎样才能在子表单上放置一个“搜索”按钮,然后弹出询问他们要搜索哪个字段?
    • 我通常将“过滤器”按钮放在主窗体上,因为过滤器将应用于父记录。该按钮通过DoCmd.OpenForm 打开一个单独的访问表单。我的回答中描述了 that 表单的基本结构。当用户单击OK 按钮时,其On Click 事件中的VBA 代码将构建过滤器字符串并将其返回给主窗体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多