Как передать ПАРАМЕТРЫ на запрос из другого запроса в MS ACCESS (без VBA)? - PullRequest
0 голосов
/ 22 апреля 2020

В MS Access у меня есть запрос с длинными логами c вокруг начальной и конечной даты (назовем это query_1). Когда вы запускаете запрос, вас спрашивают о дате начала и дате окончания:

PARAMETERS start_date datetime, end_date datetime;

query_1 является «базовым» запросом. Я хочу создать много запросов, которые получают некоторую информацию из этого query_1. Как я могу предоставить start_date и end_date в query_1 из других запросов?

Я пытался сделать это с этим, но это не сработало.

Where query_1.start_date = ## and query_1.end_date = ##

Есть идеи, как это сделать ?

=== Редактировать:

query1

PARAMETERS id number;
SELECT * FROM table1
WHERE table1.id = id

query2:

SELECT * FROM query1

результат: запрашивается 1 раз для идентификатора

PARAMETERS id number;
SELECT * FROM query1

результат: запрашивается 1 раз для идентификатора

SELECT * FROM query1
WHERE id = 13

результат: запрашивается 1 раз для идентификатора

PARAMETERS id number;
SELECT * FROM query1
WHERE id = 13

результат: запрашивается 1 раз для идентификатора

PARAMETERS id number;
SELECT * FROM query1
WHERE query1.id = 13

результат: запрашивается 1 раз для идентификатора

PARAMETERS id number;
SELECT * FROM query1
WHERE query1.id = id

результат: запрашивается 1 раз для идентификатора

PARAMETERS id1 number;
SELECT * FROM query1
WHERE query1.id = id1

результат: запрашивается 1 раз для идентификатора и 1 раз для идентификатора 1 (чаще всего) укажите одинаковое для обоих)

PARAMETERS id1 number;
SELECT * FROM query1
WHERE query1.id = query2.id1

результат: запрашивается 1 раз для идентификатора, 1 раз для id1 и 1 раз для query2.id

PARAMETERS query1.id1 number;
SELECT * FROM query1
WHERE query1.id = query2.id1

результат: запрашивается 1 раз для идентификатора , 1 раз для id1 и 1 раз для query2.id

1 Ответ

1 голос
/ 22 апреля 2020

Access передаст запрос «базовому» запросу, поэтому просто укажите параметры обычным способом:

PARAMETERS start_date datetime, end_date datetime;
Select * From query_1 Where query_1.start_date = start_date and query_1.end_date = end_date

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

Для фиксированных параметров:

Select * From query_1 Where query_1.start_date = #2019/01/01# and query_1.end_date = #2019/12/31#

Редактировать:

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

Что вы можете сделать, это сначала задать параметр, а затем открыть запрос:

DoCmd.SetParameter "id1", 13
DoCmd.OpenQuery "query2"

Другой вариант - проверить TempVars и применить их в query1.

Как создать TempVars из формы и использовать их в запросе, используя VBA

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