Возможен ли этот метод поиска в Access VBA?

Я использую Access 2007 для подключения к базе данных MS SQL через ODBC. У меня есть таблица под названием «базы», ​​она выглядит так:

Name     ID     Site
--------------------
Home      1      111
Work      2      111
Car       3      111
Castle    4      111
Store     1      222
Rest      2      222

Теперь самое сложное заключается в том, что единственная часть этой таблицы, КОТОРАЯ БУДЕТ ЗНАТЬ, это Site.
Я знаю, что могу выполнить DLookup и получить первую запись (Home,1) и сохранить ее в переменных.
НО мне нужно каким-то образом получить следующую запись (Work, 2) и сохранить ее в других переменных, а затем выполнить цикл по таблице, пока у меня не будет каждой записи, пока сайт равен 111, сохраненной в переменных.
Есть идеи? Цель этого состоит в том, чтобы сохранить эти возвращаемые значения в виде строк и в конечном итоге поместить их в сложный запрос.


person Nick Sinas    schedule 21.04.2009    source источник
comment
Ваша методология звучит неправильно, т.е. процедурно, когда вам следует ИМО искать решение на основе набора. Перебирая набор результатов, составляя значения в памяти, а затем подключая их ко второму запросу, вы пытаетесь сообщить оптимизатору, как выполнять свою работу. Лучше сделать все это одним запросом (пусть и сложным для вас, но доверьтесь оптимизатору). На самом деле, похоже, вы пытаетесь заново изобрести ВНУТРЕННЕЕ СОЕДИНЕНИЕ :)   -  person onedaywhen    schedule 22.04.2009


Ответы (2)


Я немного заржавел, но вы должны быть в состоянии сделать такой запрос.

SELECT * FROM Bases WHERE Site = 111

Верните это в набор записей, затем просто прокрутите набор записей, добавляя элементы в массив для хранения и будущего использования, в зависимости от того, что вам нужно.

Если вы не знакомы с наборами записей, ознакомьтесь с этой статьей.

person Mitchel Sellers    schedule 21.04.2009

Как onedaywhen уже говорил до меня, перебирать набор результатов в цикле для построения второго запроса — не оптимальное решение.

Я не знаю, как выглядит второй (сложный) запрос, но нельзя ли сделать что-то подобное?

select * from OtherTable 
where Name in 
(
    select Name from Bases where Site = 111
)
person Christian Specht    schedule 03.05.2009