4

У меня есть база данных Access (2010, но я также пробовал Office 2003) с множеством таблиц, форм и вложенных запросов, которые основаны на данных, введенных в форму, например, WHERE query1.year=[Forms]![Form1]![Text0]; , Теперь я хочу связать такой запрос с Excel как внешний источник данных, но это создает проблемы:

Если я использую стандартный подход «Данные -> Из доступа», те запросы, которые основаны на формах, даже не отображаются. Если я создаю ссылку на другой запрос и затем изменяю текст команды в окне свойств соединения, чтобы он указывал на запрос, который я на самом деле хочу, я получаю сообщение об ошибке («Запрос не выполнен или таблица базы данных не может быть открыта. «).

Если я использую MS Query («Данные -> Из других источников -> Microsoft Query»), я могу выбрать нужный запрос, но получить сообщение об ошибке «Слишком мало параметров. Ожидаемый 1. "

Это, конечно, имеет смысл, потому что запрос опирается на форму, которая недоступна в Excel. Я пытался использовать "реальные" параметры запроса в этих запросах, но это одно и то же. Я действительно хочу, чтобы Excel взял значение в заданной ячейке и передал его в запрос Access в качестве параметра.

Таким образом, идеальный мир будет выглядеть так: в Access у меня есть куча запросов, которые полагаются на параметры для своей работы. В Access я могу использовать форму, чтобы позволить пользователю вводить эти значения. Из Excel эти параметры должны быть взяты из заданных ячеек. Это вообще возможно?

2 ответа2

2

Капитан,

Возможно, я уверен на 90%, сделать это с помощью DAO.querydef и его свойства "parameters". Вы также можете переписать ваши запросы без параметров, а затем использовать диспетчер запросов в Excel. Для получения справки по обеим этим идеям вы можете начать с http://www.dailydoseofexcel.com/archives/2004/12/13/parameters-in-excel-external-data-queries/.

1

Я никогда не ссылаюсь на элемент управления формы в сохраненном запросе, если только это не является абсолютно необходимым по той причине, с которой вы столкнулись - это делает запросы менее широко используемыми из-за внешней зависимости от открытой формы.

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

Тем не менее, если вы можете подключиться к своей базе данных с помощью DDE, она должна быть в состоянии выполнить эту работу. DDE раньше использовался по умолчанию для слияния Word из баз данных Access (к моему вечному раздражению). Он запускает новый экземпляр Access (что означает, что если у вас есть защита на уровне пользователя, он будет сидеть и ждать с приглашением имени пользователя / пароля и никогда не будет открывать вашу базу данных), а затем связываться с ним с помощью команд DDE старого стиля , В вашем случае это должно работать, если вы открываете необходимые формы в утилитах запуска вашей базы данных. Однако, если им нужно, чтобы данные заполнялись пользователем во время выполнения, это тоже не сработает.

Окончательное решение состоит в том, чтобы отделить сохраненные запросы от форм или использовать необработанную строку SQL в Excel для извлечения данных (при отсутствии ссылки на форму).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .