2016-07-11 2 views
0

У меня есть форма с несколькими полями, которые открывают отчет в соответствии со значениями в моих списках. Это работает, но меня попросили указать поле «Эффективная дата», чтобы можно было ввести диапазон дат.Между двумя датами в vba для ms access 2010

Я добавил два текстовых поля (txtReqCreationStartDate и txtReqCreationEndDate) для начала и окончания.

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

Я никогда не использовал SQL, но нашел это онлайн и ввел его в код для Apply Filter при нажатии кнопки, но я получаю все записи. Другие пытались помочь, но я всегда получаю все записи.

Здесь представлен весь код события On Click.

Private Sub cmdVacanciesWithNoRequisitionParameters_Click() 
On Error GoTo cmdVacanciesWithNoRequisitionParameters_Click_Err 

strSQL = "SELECT * FROM qryVacanciesWithNoRequisition WHERE " _ 
     & "DateValue([Effective Date]) Between #" & Format([txtReqCreationStartDate], "yyyy-mm-dd") & "# And #" & Format([txtReqCreationEndDate], "yyyy-mm-dd") & "#;" 

'Person Number 
    If Not IsNull(Me.cboPersonNumber) Then 
     strFilter = strFilter & " AND [Person Number] Like """ & Me.cboPersonNumber & """ " 
    End If 

      'Person Name 
    If Not IsNull(Me.cboPersonName) Then 
     strFilter = strFilter & " AND [Person Name] Like """ & Me.cboPersonName & """ " 
    End If 

      'Job Code 
    If Not IsNull(Me.cboJobCode) Then 
     strFilter = strFilter & " AND [Job Code] Like """ & Me.cboJobCode & """ " 
    End If 

     'Person Number 
    If Not IsNull(Me.cboBusinessUnit) Then 
     strFilter = strFilter & " AND [Business Unit] Like """ & Me.cboBusinessUnit & """ " 
    End If 

     'Department 
    If Not IsNull(Me.cboDepartment) Then 
     strFilter = strFilter & " AND [Department] Like """ & Me.cboDepartment & """ " 
    End If 

     'Supervisor 
    If Not IsNull(Me.cboSupervisor) Then 
     strFilter = strFilter & " AND [Supervisor] Like """ & Me.cboSupervisor & """ " 
    End If 

     'Job Title 
    If Not IsNull(Me.cboJobTitle) Then 
     strFilter = strFilter & " AND [Job Title] Like """ & Me.cboJobTitle & """ " 
    End If 

      'If the report is closed, open the report 
    If SysCmd(acSysCmdGetObjectState, acReport, "rptVacanciesWithNoRequisition") <> acObjStateOpen Then 
     DoCmd.OpenReport "rptVacanciesWithNoRequisition", acPreview, qryVacanciesWithNoRequisition 
    End If 

     'if report was open, use filter 
    With Reports![rptVacanciesWithNoRequisition] 
     .Filter = Mid(strFilter, 6) 
     .FilterOn = True 
    End With 

cmdVacanciesWithNoRequisitionParameters_Click_Exit: 
    Exit Sub 

cmdVacanciesWithNoRequisitionParameters_Click_Err: 
    MsgBox Error$ 
    Resume cmdVacanciesWithNoRequisitionParameters_Click_Exit 

End Sub 

Заранее благодарим за помощь.

+0

* (Вам нужно очистить форматирование немного больше, пожалуйста. Не все «под» отображаются как «код».) ### Если сказать, я бы предположил, что вы 'Debug.print'' strFilter' после того, как вы полностью сгенерировали его, чтобы вы могли * видеть *, что в готовой строке содержится. ## Также, почему вы используете 'Mid (strFilter, 6)'? ## Если вы «получаете все записи», должно быть что-то не так с вашим фильтром. Продолжайте работать, это ... вы * должны быть * в основном на правильном пути. –

ответ

0

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

Изменить

strSQL = "SELECT * FROM qryVacanciesWithNoRequisition WHERE " _ 
     & "DateValue([Effective Date]) Between #" & Format(Me.txtReqCreationStartDate, "yyyy-mm-dd") & "# And #" & Format(Me.txtReqCreationEndDate, "yyyy-mm-dd") & "#;" 

EDIT - зная теперь, что дата вступления в силу является текстовым полем

Изменить это:

If (IsDate(Me.txtReqCreationStartDate) AND IsDate(Me.txtReqCreationEndDate)) then 
     strFilter = strFilter & " CDate([Effective Date]) Between #" & 
    CDate(Me.txtReqCreationStartDate) & "# And #" & _ 
    CDate(Me.txtReqCreationEndDate) & "#" 
End If 
+0

Привет, спасибо за помощь. Мне нравится тот, у кого есть Null, потому что я знал, что должен проверить это. Я попробовал оба из них, но получил «Undefined function« Value »в выражении оба раза. Кажется, что это не похоже на значение Value из DateValue. –

+0

Извините, я предположил, что вы уже проверили свое SQL-поле If If EffectiveDate - поле даты, которое вы может просто удалить этот DateValue - я даже не проверял, является ли это реальной функцией или нет. Обновлено с помощью ответа – dbmitch

+0

[Дата вступления в силу] - текстовый тип данных. Данные в таблице показаны как yyyy-mm-dd. –

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