根据查询结果访问查询

时间:2015-06-05 11:32:17

标签: access-vba

我是Access和查询的新手,但尝试快速学习:)

项目有2个表:tblClientData仅包含客户数据,tblClientComments包含对所有客户进行的所有评论。

  1. 数据库

    • 包含名为tblClientData
    • 的客户数据的表
    • 包含对tblClientComments
    • 客户评论的表格
    • 表格显示所有具有查找,添加或更改现有数据功能的上层数据
  2. 我想制作一个选项按钮 - 如果勾选它只会显示某些客户端,当未选中时它会再显示一次。这里出现了问题。

    此查询的条件来自此数据库中的另一个表(tblClientComments)。例如:如果员工联系了客户 - 他正在评论。

    为了完成此任务,我需要从tblClientComments获取所有唯一ID,然后将每个ID作为条件添加到查询tblClientData。我尝试使用tblClientComments中的值创建一个数组,然后创建一个查询,但到目前为止仍在使用语法。

    或许还有另一种方式?

1 个答案:

答案 0 :(得分:2)

我没有看到任何您需要VBA来构建查询的原因。一个简单的SQL IN()语句当然应该足够了:

SELECT Client.ID, Client.OtherInfo
FROM tblClientsData As Client WHERE Client.ID IN(SELECT tblClientComments.CustID From tblClientComments)

现在,您有几个选择。 (我假设你为了简单起见而使用复选框。)

  1. 将SQL分配给您用于表单的查询。由于这些更改取决于对复选框的更改,因此请为After Update事件分配VBA子:
    • 转到布局视图
    • 点击您的复选框
    • 转到属性表
    • 上的“事件”选项卡
    • 点击On Click
    • 旁边的...按钮
    • 命中代码生成器
  2. 现在输入一些代码:

    If(Forms!yourForm!yourCheckbox = True) Then
        CurrentDB.QueryDefs("yourQuery").SQL = "SELECT Client.ID, Client.OtherInfo FROM tblClientsData As Client WHERE Client.ID IN(SELECT Comments.CustID From Comments)"
    Else
        CurrentDB.QueryDefs("yourQuery").SQL = "SELECT Client.ID, Client.OtherInfo FROM tblClientsData As Client"
    End If
    

    然后,您可以使用Forms!yourForm.Refresh通过复选框反映您的更改。

    1. 另一种可能更简单的解决方案可能是使用您打开/关闭的a filterDoCmd.ApplyFilter应该是一种非常直接的方式来更改表单的内容。 (请注意,最后一个超链接的示例与您的情况非常相似。)