我已多次查看这段代码,并且不确定为什么字符串没有转换为数据结构日期。请帮助解释为什么会发生这种情况。我试图连接“#”& dataFROM&最后搜索中的“#”where子句以另一种形式工作。可能是If语句中的复杂条件使得它更有效。
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
答案 0 :(得分:1)
在VBA和SQL之间处理Null的方式不同。
以下逻辑表达式在VBA中不起作用:
If dataFROM Is Not Null And dataTHRU Is Not Null Then
更改为使用IsNull()
布尔函数:
If IsNull(dataFROM) And IsNull(dataTHRU) Then
答案 1 :(得分:0)
使用CDate。它使用起来相当简单。如果您的字符串是" 2015年8月7日",您可以这样做:
CDate("August 7, 2015")
在您的具体情况下,它会是这样的:
dataFROM = CDate(txtFROM.Value)
dataTHRU = CDate(txtTHRU.Value)
编辑:您还应该查看DateValue
和TimeValue
。这些可以以非常类似的方式使用,以获得日期或时间。当我试图专门分开日期和时间时,我会使用它们。否则,我主要使用CDate。
答案 2 :(得分: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
答案 3 :(得分:-1)