Передать параметр из Excel в запрос Access

7569
CaptainProton

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

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

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

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

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

4

2 ответа на вопрос

2
Doug Glancy

Капитан,

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

1
David W. Fenton

I never reference a form control in a saved query unless it's absolutely necessary, for the very reason you've encountered -- it makes the queries less widely usable by virtue of the outside dependency on the form being open.

Access provides multiple ways of applying criteria to recordsets at runtime, so there's almost never any need to hardwire a dependency on a form control.

That said, if you can connect to your database with DDE, it should be able to do the job. DDE used to be the default for Word merge from Access databases (to my eternal annoyance). It launches a new instance of Access (which means that if you have user-level security in place, it will sit and wait with a username/password prompt and never open your database), and then communicates with it via old-style DDE commands. In your case, it ought to work if you open the needed forms in your database's startup utilities. However, if they need to have data filled out by the user at runtime, then that won't work, either.

The ultimate solution is to decouple your saved queries from the forms, or to use the raw SQL string within Excel to retrieve the data (absent the form reference).