Как использовать подзапрос в предложении where веб-приложения Access?

Я работаю над созданием своего первого «веб-приложения» с помощью Microsoft Access 2013 и публикацией его на портале Sharepoint моей компании. Пока это работает превосходно, но я, кажется, не могу понять, что в противном случае было бы очень простой проблемой в любом другом решении для баз данных.

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

[Work Date] = (
    SELECT MAX([Work Date]) 
    FROM [Work Attempt] 
    WHERE [Work Date] < Today()
)

Однако веб-приложения, похоже, не поддерживают подзапросы в своем предложении requery where. Даже использование макроса данных не поддерживает использование таких функций, как MAX.

Есть ли способ заставить веб-приложение делать то, что я хочу, здесь? Я могу очень легко получить «Вчера», поставив

[Work Attempt].[Work Date] = DateAdd(Day, -1, Today())

в предложении requery where, но это мне не помогает, потому что мы не работаем по выходным, и функция становится бесполезной в понедельник (аналогично для «завтра» в пятницу).


person Nathan Cox    schedule 08.07.2013    source источник
comment
Попробуйте использовать для этого два отдельных запроса. Вы можете сослаться на второй запрос (содержащий желаемую дату работы) из первого. Или используйте DMAX-функцию, чтобы получить рабочую дату.   -  person Robert Harvey    schedule 08.07.2013
comment
Я не думаю, что dmax существует в веб-приложении, но я могу ошибаться.   -  person Nathan Cox    schedule 09.07.2013
comment
Вы используете запросы доступа или что-то еще?   -  person Robert Harvey    schedule 09.07.2013
comment
@RobertHarvey Я использую Access 2013 для работы над пользовательским веб-приложением, которое публикуется в sharepoint. Все, что у меня есть до сих пор, — это редактирование элементов управления действиями в форме (например, OnClick, OnLoad). Мне еще не приходилось создавать отдельный запрос для всего, что я сделал, и, похоже, мне это не нужно. Я думаю, что вы должны иметь возможность использовать макрос данных для этого типа фильтрации.   -  person Nathan Cox    schedule 09.07.2013
comment
Я посмотрел макросы данных (я никогда не использовал их раньше), и они выглядят как моральный эквивалент триггера в SQL Server. Они запускают некоторый код в ответ на какое-то событие, такое как сохранение или удаление записи. Я полагаю, вы могли бы заполнить форму таким образом, но я думаю, что вам действительно нужен добросовестный запрос. Запрос заменяет таблицу и выполняет всю необходимую фильтрацию за кулисами.   -  person Robert Harvey    schedule 09.07.2013
comment
Я пытаюсь добиться того, чтобы в представлении таблицы данных были кнопки на панели действий над листом, которые фильтруют данные определенным образом. Пока все отлично работает, но, возможно, это выходит за рамки того, чем я занимаюсь. Я предполагаю, что следующим шагом будет посмотреть, смогу ли я получить кнопку на панели действий, чтобы переключить источник данных на запрос, а затем перезагрузить данные.   -  person Nathan Cox    schedule 09.07.2013


Ответы (1)


Я нашел решение, которое является приемлемым.

Я создал запрос с именем Previous Scheduled Day, который ссылается на мою таблицу Work Attempt и использует агрегатную функцию MAX в поле Work Date, а второй скрытый экземпляр Work Date используется для ограничения данных до <Today().

Затем я создал макрос данных Get Previous Work Day, который связывает SetReturnVal с Look Up A Record In (который ссылается на запрос Previous Work Day без предложения where).

В элементе OnClick панели действий я сначала запускаю макрос данных, устанавливая для локальной переменной значение LastWorkDay. Затем я вызываю RequeryRecords, используя

[Work Attempt].[Work Date]=[LastWorkDay]

как мое предложение where.

Промойте и повторите для «следующего рабочего дня».

Вот как выглядит мой макрос данных «Получить предыдущий рабочий день»: Получить предыдущий рабочий день

Вот как выглядит мое действие «OnClick»: OnClick

person Nathan Cox    schedule 09.07.2013