Access 2007迭代已保存的查询

时间:2010-08-12 17:10:28

标签: ms-access ms-access-2007

我正在使用相当大的信息数据库。我需要在一个保存的查询中使用一组不同的值作为另一个查询的'where'子句中的参数。迭代不同值的结果集的最佳方法是什么?我是Access和VBA的新手。

3 个答案:

答案 0 :(得分:1)

我可能不理解这个问题,因为我的解释与其他答案完全不同。

在我看来,其他人已经回答假设“迭代不同值的结果集的最佳方式是什么”是关键部分,我专注于“我需要使用一组独特的一个保存查询中的值作为另一个查询的“where”子句中的参数“。

有两种方法可以解决这个问题:

  1. 标准访问方式:保存其他查询,将其添加到第一个查询并加入您要过滤的字段。

  2. 使用IN子句作为子查询。

  3. 说出你的主要问题是:

      SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
      FROM tblBook
    

    ...并且您希望使用此查询过滤给一组作者:

      SELECT tblAuthor.AuthorID
      FROM tblAuthor
      WHERE tblAuthor.BirthYear < 1900
    

    您可以将最后一个查询保存为“qryAuthorsBefore1900”,然后在第一个查询的连接中使用它:

      SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
      FROM tblBook INNER JOIN qryAuthorsBefore1900 ON tblBook.AuthorID = qryAuthorsBefore1900.AuthorID
    

    这是方法1。

    方法2将是:

      SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
      FROM tblBook
      WHERE tblBook.AuthorID IN (SELECT tblAuthor.AuthorID FROM tblAuthor WHERE tblAuthor.BirthYear < 1900)
    

    现在,这些都是不需要的 - 你可以在没有子查询或保存的QueryDef的情况下完成所有事情:

      SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
      FROM tblBook INNER JOIN tblAuthor ON tblBook.AuthorID = tblAuthor.AuthorID
      WHERE tblAuthor.BirthYear < 1900
    

    此结果集应该是可编辑的。

    上面的所有查询都可以使用常规的Query By Example网格创建,无需深入查看SQL视图(如果您决定使用该路径,则复制子查询的SQL除外)。

    但是,当然,我可能完全误解了整个问题。

答案 1 :(得分:0)

是直通查询还是其他Access查询?如果是passthrough,请使用VBA将第二个查询的.sql属性替换为第一个查询中的值。如果是Access,您可以使用连接。

答案 2 :(得分:0)

@ Beth的回答可能是最好的,如果你想发布你的表和查询的一些细节,我相信可以提供更详细的答案,但是,如果你因为某些原因需要迭代查询结果要获得第二个结果集,您可以使用记录集。在VBA:

 Dim rs As DAO.Recordset
 Dim rs2 As DAO.Recordset
 Dim sSQL As String

 ''You open an SQL string, a table, or a query as a recordset
 Set rs = CurrentDB.OpenRecordset("QueryName")

 Do While Not rs.EOF
    sSQL= "SELECT Some, Fields FROM ATable WHERE ID = " & rs!NumericID

    Set rs2 = CurrentDB.OpenRecordset(sSQL)
    ''Now what?
    rs.MoveNext
 Loop