MS Access - Docmd.OpenReport - PullRequest
       9

MS Access - Docmd.OpenReport

0 голосов
/ 15 мая 2018

Я пытаюсь открыть отчет с полем даты между двумя датами (dateFrom & dateTo), которое приходит из текстовых полей в форме.

dateFrom = Forms!formOptions!txtDateFrom.Value
dateTo = Forms!formOptions!txtDateTo.Value 

Пробовал:

(Edit :)

с и без '#' вокруг переменных dateFrom и dateTo

& с и без [] вокруг имени поля, и все еще не может получить это на работу.

Когда я пытаюсь этот код:

strCriteria = "[ActionTime] >= '" & dateFrom & "' And [ActionTime] <= '" & dateTo & "'"
DoCmd.OpenReport "reportLog", acViewReport, , strCriteria

Появится диалоговое окно «Ввод значения параметра», я проверил источник контроля отчета и правильное имя поля, а также не происходит сортировка или группировка.

И когда я добавлю пару лишних '' вокруг имени поля в приведенном выше коде, это будет:

strCriteria = "'[ActionTime]' >= '" & dateFrom & "' And '[ActionTime]' <= '" & dateTo & "'"
DoCmd.OpenReport "reportLog", acViewReport, , strCriteria

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

Также пытались использовать WhereCondition:

DoCmd.OpenReport "reportLog", acViewReport, , WhereCondition:="'[ActionTime] >= #" & dateFrom & "# AND [ActionTime] <= #" & dateTo & "#'"

И отчет открывается нормально, но со всеми записями, не следуя условию WhereCondition.

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

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вам необходимо правильно отформатировать строковые выражения для значений даты:

Dim dateFrom As Date
Dim dateTo As Date

dateFrom = DateValue(Forms!formOptions!txtDateFrom.Value)
dateTo = DateValue(Forms!formOptions!txtDateTo.Value)

strCriteria = "[ActionTime] >= #" & Format(dateFrom, "yyyy\/mm\/dd") & "# And [ActionTime] <= #" & Format(dateTo, "yyyy\/mm\/dd") & "#"
Debug.Print "'" & strCriteria & "'"
DoCmd.OpenReport "reportLog", acViewReport, , strCriteria

Редактировать: если ActionTime появляется более одного раза, попробуйте:

strCriteria = "[reportLog].[ActionTime] >= #" & Format(dateFrom, "yyyy\/mm\/dd") & "# And [reportLog].[ActionTime] <= #" & Format(dateTo, "yyyy\/mm\/dd") & "#"
0 голосов
/ 15 мая 2018

Общие попытки не будут работать. Первое, потому что даты должны быть отформатированы определенным образом (ГГГГ-ММ-ДД или ММ / ДД / ГГГГ) и заключены в # (значение, а не имя поля). Второе, потому что вы сравниваете буквальную строку '[ActionTime]' со строкой, содержащей дату, и это не очень разумно.

Однако простой и безопасный способ сделать это - просто установить параметры:

strCriteria = "[ActionTime] >= dateFrom And [ActionTime] <=  dateTo"
DoCmd.SetParameter "dateFrom", dateFrom
DoCmd.SetParameter "dateTo", dateTo
DoCmd.OpenReport "reportLog", acViewReport, , strCriteria

Подробнее об использовании параметров здесь .

...