Ms access Access 2007遍历已保存的查询

Ms access Access 2007遍历已保存的查询,ms-access,ms-access-2007,Ms Access,Ms Access 2007,我正在处理一个相当大的信息数据库。我需要在一个保存的查询中使用一组不同的值作为另一个查询的where子句中的参数。迭代不同值的结果集的最佳方法是什么?我对Access和VBA相当陌生。这是一个直通查询还是另一个Access查询?如果是passthrough,则使用VBA将第二个查询的.sql属性替换为第一个查询的值。如果是Access,您可能可以使用联接。@Beth的答案可能是最好的,如果您希望发布表和查询的一些详细信息,我相信可以提供更详细的答案,但是,如果您出于某种原因而不是为了获得第二个结

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

这是一个直通查询还是另一个Access查询?如果是passthrough,则使用VBA将第二个查询的.sql属性替换为第一个查询的值。如果是Access,您可能可以使用联接。

@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

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

在我看来,其他人的回答是,假设迭代不同值的结果集的最佳方式是关键部分,我将重点放在我需要在一个保存的查询中使用不同的值集作为另一个查询的“where”子句中的参数

有两种方法可以实现这一点:

标准的访问方式:保存另一个查询,将其添加到第一个查询中,并加入到要筛选的字段中

将IN子句用作子查询

假设您的主要查询是:

  SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
  FROM tblBook
…并且您希望使用此查询筛选到一组作者:

  SELECT tblAuthor.AuthorID
  FROM tblAuthor
  WHERE tblAuthor.BirthYear < 1900
这就是方法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
此结果集应该是可编辑的

上面的所有查询都可以使用“按示例进行常规查询”网格创建,如果您决定使用该路径,则无需进入SQL视图,只需复制子查询的SQL即可


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

直通与此有什么关系?这只适用于服务器数据库,问题中除了Access本身没有提及任何内容。正如您在方法1中提到的,如果不是pt查询,则应该能够使用联接而不是VBA。如果他想遍历结果集,他需要使用VBA,但我只是用它来替换pt查询中的变量。我真的没有看到足够的信息来完全理解他想做什么。
  SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
  FROM tblBook INNER JOIN tblAuthor ON tblBook.AuthorID = tblAuthor.AuthorID
  WHERE tblAuthor.BirthYear < 1900