#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