2016-08-29 8 views
1

Вопрос только. Ситуация такова:VBA Переменные внутри DoCmd.RunSQL

У меня есть 15 табличных запросов, которые извлекают данные для другого кода разъяснения представления, который использовался в претензии; т. е. вытащить все претензии, где код разъяснения представления 5. На данный момент у меня есть макрос, который будет запускать все 15 запросов, но каждый раз, когда мне нужно ввести регион, который я фильтрую из-за подсказки [What Region?], я поместили в поле критериев.

Мой вопрос:

Можно ли использовать VBA для выполнения всех 15 запросов с использованием DoCmd.RunSQL, где я должен только ввести номер региона один раз, и он будет применять его ко всем запросам?

Мои первоначальные мысли заключались в том, что VBA подскажут мне, для какого региона я фильтрую, храню это в переменной, а затем использую эту переменную в инструкции SQL. Но я даже не уверен, что вы можете это сделать? Заранее благодарим за любые советы, которые могут быть даны!

Обновление: Итак, прочитав несколько потоков, я создал базу данных, чтобы попробовать некоторые из концепций, и я думаю, что я могу быть на правильном пути?

Private Sub btnTest_Click() 

Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim SQLString As String 

SQLString = "SELECT tblEmployees.ID, tblEmployees.Last_Name, tblEmployees.First_Name, tblEmployees.SS_ID INTO Test" _ 
     & "FROM tblEmployees" _ 
     & "WHERE (((tblEmployees.ID)=[What number]));" 

Set qdf = CurrentDb.QueryDefs("Query1") 

qdf.Parameters(0).Value = InputBox("What is the ID Number") 

qdf.Execute 
qdf.Close 

Set db = Nothing 
Set qdf = Nothing 

End Sub 

Так, чтобы применить это к 15 запросов я бы просто Dim другие переменные, как DAO.QueryDef правильно? Я уверен, что мне тоже нужна часть SQLString? Кроме того, я заметил, что при запуске этого макет кода для создания новой таблицы потребовалось довольно много времени. Это нормально? Кроме того, код не будет работать, если создаваемая таблица уже существует. Есть ли способ просто заменить код существующей таблицы на новую? Вид нового для этого VBA так спасибо за ваше терпение.

+0

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

ответ

2

Короткий ответ: да, это возможно. Некоторые ключевые слова, которые вы хотите ознакомиться, - это «параметры», которые являются переменными с подсказкой и «Querydef» или определением запроса.

Существует довольно много статей, в которых подробно описывается, как программно передавать значения параметров в запросе. Просмотрите страницу this, чтобы получить полный обзор того, как это сделать. В частности, последний пример использует поле ввода, чтобы побудить пользователя предоставить значение параметра, которое приближает вас к тому, что вам нужно. (т. е. cmd.Parameters(0).Value = InputBox("Enter a country name"))

Модифицированный к вашему дизайну, возможно, лучше всего создать строковую переменную и сначала спросить параметр, а затем использовать переменную при объявлении параметров в отдельности, что позволит применить подачу одного параметра ко всем запросам.

EDIT

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

Private Sub btnTest_Click() 

Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim strParamter As String 

Set db = CurrentDb 

strParamter = InputBox("What is the ID Number") 

Set qdf = db.QueryDefs("Query1") 

qdf.Parameters(0).Value = strParameter 

qdf.Execute 
qdf.Close 

'Now move to next query 

Set qdf = db.QueryDefs("Query2") 

qdf.Parameters(0).Value = strParameter 

qdf.Execute 
qdf.Close 

'...etc. 

Set qdf = Nothing 
Set db = Nothing 


End Sub 
+0

Хм, я попробую и поиграю с ним. Большое вам спасибо за ваше время, я очень ценю это. Я уверен, что у меня будут некоторые последующие вопросы после того, как я буду сидеть с ним в жаркую минуту. –

+0

Имейте в виду, что для каждого из ваших запросов вам понадобится объект querydef, но вам нужно только одно поле ввода и одна переменная для передачи представленного параметра. – MoondogsMaDawg

+0

Эй, Кристофер, интересно, есть ли у вас момент посмотреть выше при обновлении? Спасибо –

Смежные вопросы