Хорошо, несколько вещей: вы НЕ хотите использовать сквозной запрос для списка / поля со списком. НИКОГДА !!!!
Почему? Клиент Access не может фильтровать PT-запрос. Здесь это кажется противоречивым.
Во-первых, давайте проясним: самый быстрый способ получения данных - это запрос PT - без всяких сомнений.
Однако давайте предположим, что поле со списком большое - скажем, 3000 строк.
И ТАКЖЕ предположим, что поле со списком привязано (это означает, что оно сохраняет значение в привязанный набор записей формы.
Хорошо, помните приведенное выше правило !!! - Клиент доступа НИКОГДА не может фильтровать запрос PT.
Итак, если у вас есть отчет, который вы запускаете? Если ваш запрос PT не ПРЕДВАРИТЕЛЬНАЯ ФИЛЬТРАЦИЯ (критерии существуют в запросе PT - даже в хранимой процедуре), тогда добавление предложения where в форму (или отчет), или в этом случае поле со списком НЕ БУДЕТ РАБОТАТЬ - возвращается ПОЛНЫЙ набор данных, который не может быть отфильтрован.
Итак, если у вас есть запрос PT с 500 000 строками, и вы делаете это:
docmd.OpenReport "rtpInvoice", acViewPreview,,"InvoiceNumber = 1234"
Вышеупомянутое будет вытягивать 500000 строк.
Однако, если вы использовали связанную таблицу с самолетом Джейн или лучшую ссылку на представление, и она ТАКЖЕ имеет 500000 строк ? По сетевой трубе сходит только 1 запись! * 10 20 *
Итак, если это поле со списком привязано к 5000 строкам, и происходит простая навигация к СЛЕДУЮЩЕЙ записи? Ну, поле со списком, конечно, будет иметь одно значение - базовый набор записей связанной формы. Но он не может фильтровать + отображать ОДНО значение для поля со списком (большинство полей со списком многостолбцовые - 1-й столбец = PK, а 2-й столбец = какое-то описание.
Таким образом, доступ на самом деле довольно умный , и он будет пытаться получить ТОЛЬКО ОДНО значение из 5000 строк, управляющих комбинированным окном. Но исключением из правила, конечно же, является запрос PT!
Опять же: клиент доступа не может фильтровать запрос PT.
Итак, если поле со списком содержит большой набор данных И ТАКЖЕ загружается запросом PT, тогда все идет медленно, как собака. У меня была одна система, в которой запрос PT возвращал около 100 000 строк. Просто простая навигация к следующей записи была медленной, как собака.
Замена запроса PT на связанный вид заставила форму работать практически мгновенно. Это связано с тем, что из 100 000 строк Access может извлечь ТОЛЬКО ОДНУ строка для отображения поля со списком и этого 2-го столбца.
Итак, хотя запрос PT - это самый быстрый способ получить данные? Да, 100% верно, но вы хотите использовать ТОЛЬКО эту скорость d преимущество, КОГДА вам нужны ВСЕ записи этого запроса PT. Если вы собираетесь фильтровать ПОСЛЕ или ПРОТИВ запроса PT (например, как это делается для связанного поля со списком), то будет выполнено полное сканирование всех записей, управляющих этим полем со списком.
Лучший подход? Сбросьте запросы PT для поля со списком и замените их связанными представлениями. Вы даже можете указать сортировку в представлении (да, он попадает в верхние 100%). Так что помещайте ТОЛЬКО имя представления в поле со списком - не запускайте построитель запросов.
И вы даже можете уйти, используя прямую ссылку на связанную таблицу. Опять же, клиент Access может фильтровать этот набор данных для поля со списком.
Таким образом, нет необходимости тратить все время разработчика на создание запроса PT для поля со списком, и нет необходимости (или преимущества в скорости ) пытается использовать код для загрузки и заполнения поля со списком. Но если запрос PT вернет более 30 строк, тогда вы хотите сбросить запрос PT и использовать связанную таблицу или, что еще лучше, связанное представление.
Я бы не стал возиться с перетаскивание таблицы с сервера на локальный - вы могли бы это сделать, но это просто лишний код, лишняя боль, и это действительно очень мало для вас. И часто это может усугубить ситуацию. Зачем вытаскивать целую таблицу из большого количества строк для поля со списком, когда вы просто запускаете форму, доступ достаточно умен, чтобы вытащить ТОЛЬКО одну строку, необходимую для отображения поля со списком. Он не будет извлекать данные, пока вы не нажмете на комбо, чтобы сделать выбор.
Если ваши запросы PT содержат более 50 или 100 строк для заполнения поля со списком, а это поле со списком связано с окном со списком? Затем вам нужно сбросить запрос PT и использовать связанную таблицу / представление - и вы получите гораздо лучшую производительность.