Как ограничить sql датой окончания в отчете о доступе?

#sql #vba #ms-access

Вопрос:

Я создал базу данных Access для отслеживания заказов на выполнение работ и создания/печати расписаний. В отчете у меня есть две разные кнопки печати. Одна кнопка выводит расписание недель, которое я просматриваю в данный момент, на свой принтер, а другая кнопка выводит текущую неделю и все будущие недели в формате PDF. Мой код для 2-й кнопки изменяет источник данных SQL и работает идеально.

Этот код выглядит следующим образом (см. рис.): Рабочий SQL-код

——Установите принтер по умолчанию в формат PDF——

 -working code-
 

——Установите источник данных для отображения всего, начиная с этой недели и будущих недель, за исключением незапланированных (NULL)——

 Dim strSQL As String
Dim vbDblQuote As String

'set variable to = "
vbDblQuote = Chr(34)

'SQL for the data source
strSQL = "SELECT tblSchedule.ScheduleID, tblSchedule.Scheduled, tblSchedule.Attending, "
strSQL = strSQL amp; "tblSchedule.Time, tblSchedule.Account, tblSchedule.Address , "
strSQL = strSQL amp; "tblSchedule.Comments, tblSchedule.Contact, tblSchedule.WONumber "
strSQL = strSQL amp; "FROM tblSchedule "
strSQL = strSQL amp; "WHERE (((DatePart(" amp; vbDblQuote amp; "ww" amp; vbDblQuote amp; ",[Scheduled])) "
strSQL = strSQL amp; ">=DatePart(" amp; vbDblQuote amp; "ww" amp; vbDblQuote amp; ",Date()))"
strSQL = strSQL amp; "AND ((Year([Scheduled]))>=Year(Date())))"
strSQL = strSQL amp; "ORDER BY tblSchedule.Scheduled, tblSchedule.Attending, tblSchedule.Time;"

'set data source for the report
Reports![rptSchedule].Report.RecordSource = strSQL
 

——Печать и восстановление принтера по умолчанию——

 -working code-
 

Теперь я хочу, чтобы пользователь мог выбрать дату окончания отчета. Я изменил код всеми возможными способами, но сейчас не могу заставить его работать. Кто-нибудь может помочь мне с новым SQL? Он содержит переменную, принимающую дату пользователя.

Новый код выглядит следующим образом (см. рис.): Новый код

——Установите принтер по умолчанию в формат PDF——

 -working code-
 

——Получить конечную дату от пользователя——

 Dim endDate
endDate = InputBox("Select an End Date m/d/yy")
 

——Установите источник данных для отображения всего, начиная с этой недели и будущих недель, за исключением незапланированных (NULL)——

 Dim strSQL As String
Dim vbDblQuote As String

'set variable to = "
vbDblQuote = Chr(34)

Dim mySQLVariable

'set variable to user’s end date
mySQLVariable = endDate

'SQL for the data source
strSQL = "SELECT tblSchedule.ScheduleID, tblSchedule.Scheduled, tblSchedule.Attending, "
strSQL = strSQL amp; "tblSchedule.Time, tblSchedule.Account, tblSchedule.Address , "
strSQL = strSQL amp; "tblSchedule.Comments, tblSchedule.Contact, tblSchedule.WONumber "
strSQL = strSQL amp; "FROM tblSchedule "
strSQL = strSQL amp; "WHERE (((DatePart(" amp; vbDblQuote amp; "ww" amp; vbDblQuote amp; ",[Scheduled])) "
strSQL = strSQL amp; ">=DatePart(" amp; vbDblQuote amp; "ww" amp; vbDblQuote amp; ",Date()))"
strSQL = strSQL amp; "AND ((Year([Scheduled]))>=Year(Date())))"

strSQL = strSQL amp; "OR (((DatePart(" amp; vbDblQuote amp; "ww" amp; vbDblQuote amp; ", [Scheduled])) "
strSQL = strSQL amp; "<= DatePart(" amp; vbDblQuote amp; "ww" amp; vbDblQuote amp; ", Date()   '" amp; (mySQLVariable) amp; "')) "
strSQL = strSQL amp; "And ((Year([Scheduled])) = Year(Date()   '" amp; (mySQLVariable) amp; "'))) "

strSQL = strSQL amp; "ORDER BY tblSchedule.Scheduled, tblSchedule.Attending, tblSchedule.Time;"

'set data source for the report
Reports![Reset_Schedule].Report.RecordSource = strSQL
 

——Печать и восстановление принтера по умолчанию——

 -working code-
 

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

Комментарии:

1. Year(Date() '" amp; (mySQLVariable) Должно ли это просто быть year(mySqlVariable) ?

2. Спасибо за помощь Nathan_Sav. Я попробовал ваше предложение, но все равно не смог заставить его работать. Я думал, ты там что-то напутал. Я даже попытался изменить тип переменной на строку, целое число, дату и даже вариант. Я действительно думаю, что проблема где-то в SQL. Пожалуйста, любые эксперты по доступу/SQL, которые могут помочь, будут очень признательны.

3. Советую использовать элемент управления формой вместо поля ввода для ввода параметра. Проверка ввода в поле ввода затруднена. Зачем код для установки источника записей отчета? Установите его в конструкторе и используйте аргумент WHERE DoCmd.OpenReport для применения критериев фильтрации.

4. Поперечный столб utteraccess.com/topics/2061769