2015-08-08 3 views
0

Я просмотрел этот фрагмент кода несколько раз и не знаю, почему строка не преобразуется в дату структуры данных. Пожалуйста, помогите, почему это может произойти. Я попытался связать «#» & dataFROM & «#» в конечном поиске, где предложение, которое работает в другой форме. Это могут быть сложные условия из оператора If, которые делают эту работу более эффективной.VBA Datatype Ошибка несоответствия 13

Private Sub txtTHRU_AfterUpdate() 
Dim dataFROM As Date 
Dim dataTHRU As Date 
Dim myLabelsExpiration As String 
dataFROM = txtFROM.Value 
dataTHRU = txtTHRU.Value 
If dataFROM Is Not Null And dataTHRU Is Not Null Then 
myLabelsExpiration = "Select * from [Members] where ([Expire] Between #" & dataFROM & "# AND #" & dataTHRU & "#)" 
Me.MembersWithFriendsSubform.Form.RecordSource = membershipCutoff 
Me.MembersWithFriendsSubform.Form.Requery 
End If 
End Sub 

ответ

1

Нулевые файлы обрабатываются по-разному между VBA и SQL.

Логика ниже выражение не работает в VBA:

If dataFROM Is Not Null And dataTHRU Is Not Null Then 

Изменить использовать IsNull() булеву функцию:

If IsNull(dataFROM) And IsNull(dataTHRU) Then 
+0

Добавьте также истинное или ложное условие, если вам нужно. таких как IsNull (dataFROM) = False в случае ввода данных. Но теперь моя Между тем, где предложение дает мне имя? ошибка в MS Access. – safron6

+0

Получил, что понял. Переменная была из другого кодового блока. – safron6

0

Использование CD. Это довольно просто использовать. Если строка «7 августа 2015», вы могли бы сделать это:

CDate("August 7, 2015") 

В вашем конкретном случае, это было бы так:

dataFROM = CDate(txtFROM.Value) 
dataTHRU = CDate(txtTHRU.Value) 

EDIT: Вы должны также посмотреть DateValue и TimeValue. Они могут использоваться очень похожими способами, чтобы получить только дату или просто время. Я использую их, когда я пытаюсь точно отделить дату и время. В противном случае я в основном использую CDate.

+0

Я пробовал это. Часть, в которой нуль указывает на проблему, подчеркивает ее. – safron6

+0

А ... Вы пробовали ответ Parfait? – PermaNoob

-1

Вместо Если dataFROM Is Not Null И dataTHRU Is Not Null Затем попробуйте использовать Если Not IsNull (dataFROM) И не IsNull (da taTHRU) Затем

0

Вы не можете установить переменные Date в Null.

Кроме того, вам не нужны значения даты, но их строковые выражения. Таким образом:

Private Sub txtTHRU_AfterUpdate() 

    Dim dataFROM As String 
    Dim dataTHRU As String 
    Dim myLabelsExpiration As String 

    If Not IsNull(Me!txtFROM.Value + Me!txtTHRU.Value) Then 
     dataFROM = Format(Me!txtFROM.Value, "yyyy\/mm\/dd") 
     dataTHRU = Format(Me!txtTHRU.Value, "yyyy\/mm\/dd") 
     myLabelsExpiration = "Select * From [Members] Where [Expire] Between #" & dataFROM & "# And #" & dataTHRU & "#" 

     If Me!MembersWithFriendsSubform.Form.RecordSource = membershipCutoff Then 
      Me!MembersWithFriendsSubform.Form.Requery 
     Else 
      Me!MembersWithFriendsSubform.Form.RecordSource = membershipCutoff 
     End If 
    End If 

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