Access 2007 повторяется по сохраненному запросу - PullRequest
0 голосов
/ 12 августа 2010

Я работаю с довольно большой базой информации.Мне нужно использовать отдельный набор значений в одном сохраненном запросе в качестве параметра в предложении where для другого запроса.Каков наилучший способ перебрать результирующий набор различных значений?Я довольно новичок в Access и VBA.

Ответы [ 3 ]

1 голос
/ 13 августа 2010

Я не могу понять вопрос, потому что я интерпретирую его совершенно иначе, чем другие ответы.

Мне кажется, что другие ответили, предполагая, что "Каков наилучший способ перебратьРезультирующий набор различных значений »- это ключевая часть, в которой я концентрируюсь на« Мне нужно использовать отдельный набор значений в одном сохраненном запросе в качестве параметра в предложении «где» для другого запроса ».

Существует два способа решения этой проблемы:

  1. стандартный способ доступа: сохраните другой запрос, добавьте его к первому запросу и присоединитесь к полю, по которому вы фильтруете.

  2. использовать предложение 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 будет бe:

  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 для подзапроса, если вы решите пойти по этому пути).

Но, конечно, я мог полностью неверно истолковать весь вопрос.

0 голосов
/ 12 августа 2010

@ Ответ Бет, вероятно, является наилучшим, и если вы хотите опубликовать некоторые подробности о своих таблицах и запросах, я уверен, что может быть предоставлен более подробный ответ, если вам по какой-то причине нужно перебрать результаты запроса, другие чем получить второй набор результатов, вы можете использовать набор записей. В 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
0 голосов
/ 12 августа 2010

это сквозной запрос или другой запрос на доступ? В случае выполнения используйте VBA для замены свойства .sql 2-го запроса значениями из 1-го запроса. Если Access, вы, вероятно, можете использовать соединение.

...