2015-06-05 93 views
0

我是新来访问和查询,但想快速学习:)访问查询结果

该项目有2个表:tblClientData包含客户的唯一数据,tblClientComments包含所有客户端作出的所有评论。

  1. 数据库

    • 表与客户端的数据称为tblClientData
    • 表与意见的客户称为tblClientComments
    • 形式显示所有上的数据与功能来查找,添加或更改现有数据

我想制作一个选项按钮 - 如果打勾,它只会显示某些客户端,未点击时它会再次显示。问题在这里引发。

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

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

或者也许有另一种方式?

+0

_ ..但是到目前为止还在与syntax_战斗,您尝试了什么? – Y2Que

+0

我只是想确定 - 当选项按钮被选中时,查询只显示带有评论的客户端?另外,我预计有些客户可能会有多个评论? – ZX9

回答

2

我看不出有什么理由需要VBA来构建您的查询。一个简单的SQL语句IN()当然应该足够了:

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

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

  1. 将SQL分配给您用于表单的查询。由于这些变化是依赖于更改复选框,指定一个VBA子到After Update事件:
    • 转到布局视图
    • 点击您的复选框
    • 转到事件选项卡上的属性表
    • 打...开旁边的按钮,点击
    • 命中代码生成

现在把一些鳕鱼E:

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应该是一种非常直接的方式来更改表单的内容。 (请注意,最后一个超链接上的示例与您的情况非常相似。)
+0

我用查询填充我的列表框,所以语法看起来有些不同,但你提出了一个很好的观点。由于我是这方面的初学者,我不知道我可以使用WHERE xxxyyyzzz IN。这是我以后的事情!谢谢你! :) – lowak

+0

@Iowak很高兴我能帮忙!查看[这个伟大的网站](http://www.w3schools.com/sql/default.asp)了解更多SQL,请记住,Access SQL本身就是它自己的东西。大多数情况下工作,但它在技术上与其他版本不一样。 – ZX9