2015-11-03 2 views
0

У меня есть запрос, в котором я использую оператор между выводом данных для диапазона дат. У меня есть встроенная функция VBA, которая будет оценивать последнюю дату (Макс. Дата) в таблице (чтобы получить первую дату для промежутка) и другую функцию для оценки даты остановки (последняя дата между) ... Итак, моя между датой выглядит так: Между hhMaxDte() И hhLastDte()MS Access функции диапазона времени замедления запроса

По какой-то причине наличие этих двух функций в моем выражении между двумя операциями занимает 8 раз больше времени для выполнения запроса, чем если бы я вручную вручную вводил фактические даты В себе. Кто-нибудь знает, почему это так и как я могу динамически выполнять подобный процесс, но занимать такое же количество времени, чтобы запустить запрос, например, когда я вручную вводил даты? Мой код функций приведен ниже:

Function hhMaxDte() 

If DMax("row_date", "HH_CIB_Raw_Data") + 1 = Date Then 
    hhMaxDte = 0 
Else 
    hhMaxDte = DMax("row_date", "HH_CIB_Raw_Data") + 1 
End If 

End Function 

Function hhLastDte() 

If DMax("row_date", "HH_CIB_Raw_Data") + 1 = Date Then 
    hhLastDte = 0 
Else 
    hhLastDte = Date - 1 
End If 

End Function 
+0

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

+0

Да, я просто наткнулся на то, что вы здесь говорите: http://allenbrowne.com/QueryPerfIssue.html – wlfente

+0

Функции будут вызываться один раз только, поскольку у них нет параметров, поэтому, если вы отрегулируете замену запроса функции с фиксированными значениями, вы увидите почти такой же результат. Однако, без вашего запроса, вы оставляете нас угадывающими в дикой природе. Возможно, вы пропустили индекс в поле даты. – Gustav

ответ

1

Я понял ответ, исходя из отзывов в комментариях выше. Функция выполнялась для каждой строки данных, что значительно замедляло возврат результатов. Для того, чтобы избежать этого, я использовал встроенный в функции Dmax (для анализа макс индексированных дат в таблице) и даты, чтобы создать между утверждением в разделе критериев запроса доступа:

Between DMax("row_date","HH_CIB_Raw_Data")+0 And Date()-1 

Теперь запрос Append является способный динамически извлекать данные, основанные на последних датах, отсутствующих в таблице, и работает в секундах VS 2-3 мин. Спасибо всем за участие!

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