我正在使用相当大的信息数据库。我需要在一个保存的查询中使用一组不同的值作为另一个查询的'where'子句中的参数。迭代不同值的结果集的最佳方法是什么?我是Access和VBA的新手。
答案 0 :(得分:1)
我可能不理解这个问题,因为我的解释与其他答案完全不同。
在我看来,其他人已经回答假设“迭代不同值的结果集的最佳方式是什么”是关键部分,我专注于“我需要使用一组独特的一个保存查询中的值作为另一个查询的“where”子句中的参数“。
有两种方法可以解决这个问题:
标准访问方式:保存其他查询,将其添加到第一个查询并加入您要过滤的字段。
使用IN子句作为子查询。
说出你的主要问题是:
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