Sql 在带有字符串和日期的循环中使用Dlookup的语法
我正在尝试使用命令查找是否已为某些日期选择了对象。我想用Sql 在带有字符串和日期的循环中使用Dlookup的语法,sql,vba,ms-access,Sql,Vba,Ms Access,我正在尝试使用命令查找是否已为某些日期选择了对象。我想用Dlookup方法来实现这一点,问题是,我仍然习惯于SQL语法。这是我正在尝试使用的代码: Dim i, coun as Integer For i = 1 to 10 If IsNull(DLookup("[Column1]", "Table1", "[Column1] LIKE '*AT 1/*' & i "
Dlookup
方法来实现这一点,问题是,我仍然习惯于SQL语法。这是我正在尝试使用的代码:
Dim i, coun as Integer
For i = 1 to 10
If IsNull(DLookup("[Column1]", "Table1", "[Column1] LIKE '*AT 1/*' & i "
And (("[Date_Beg] BETWEEN #" & Me.txtDate1 & "#" AND "#" & Me.txtDate2 & "#")
Or ("[Date_End] BETWEEN #" & Me.txtDate1 & "#" AND "#" & Me.txtDAte2 & "#")))) = True Then
coun = coun
else
coun = coun + 1
End If
当它被执行时,我得到一个错误
运行时错误“13”:类型不匹配
编辑:请查看我的答案,查看最终为我工作的代码。问题在于您试图传递到
DLookup
函数的SQL字符串。当您需要这样的SQL字符串时,我发现最好将它们存储为变量,然后将变量传递到函数中。让我知道这是否适合你
Sub QueryExample()
Dim i, coun As Integer
Dim strSQL As String
For i = 1 To 10
strSQL = "[Column1] LIKE *AT 1/*" & i
strSQL = strSQL & " And (([Date_Beg] BETWEEN #" & Me.txtDate1 & "# AND #" & Me.txtDAte2 & "#)"
strSQL = strSQL & " Or ([Date_End] BETWEEN #" & Me.txtDate1 & "# AND #" & Me.txtDAte2 & "#))"
'Debug.Print strSQL
If IsNull(DLookup("[Column1]", "Table1", strSQL)) = True Then
coun = coun
Else
coun = coun + 1
End If
Next i
End Sub
问题在于您试图传递到
DLookup
函数的SQL字符串。当您需要这样的SQL字符串时,我发现最好将它们存储为变量,然后将变量传递到函数中。让我知道这是否适合你
Sub QueryExample()
Dim i, coun As Integer
Dim strSQL As String
For i = 1 To 10
strSQL = "[Column1] LIKE *AT 1/*" & i
strSQL = strSQL & " And (([Date_Beg] BETWEEN #" & Me.txtDate1 & "# AND #" & Me.txtDAte2 & "#)"
strSQL = strSQL & " Or ([Date_End] BETWEEN #" & Me.txtDate1 & "# AND #" & Me.txtDAte2 & "#))"
'Debug.Print strSQL
If IsNull(DLookup("[Column1]", "Table1", strSQL)) = True Then
coun = coun
Else
coun = coun + 1
End If
Next i
End Sub
我采纳了@pheeper的建议,稍微修改了他的代码,使程序正常运行。这就是成功的原因:
Dim i, coun as Integer
For i = 1 To 10
strSQL = "[Column1] LIKE ""*AT 1/" & i & "*"""
strSQL = strSQL & " And (([Date_Beg] BETWEEN #" & Me.txtDate1 & "# AND #" & Me.txtDate2 & "#)"
strSQL = strSQL & " Or ([Date_End] BETWEEN #" & Me.txtDate1 & "# AND #" & Me.txtDate2 & "#))"
'Debug.Print strSQL
If IsNull(DLookup("[Column1]", "Table1", strSQL)) = True Then
coun = coun
Else
coun = coun + 1
End If
Next i
我采纳了@pheeper的建议,稍微修改了他的代码,使程序正常运行。这就是成功的原因:
Dim i, coun as Integer
For i = 1 To 10
strSQL = "[Column1] LIKE ""*AT 1/" & i & "*"""
strSQL = strSQL & " And (([Date_Beg] BETWEEN #" & Me.txtDate1 & "# AND #" & Me.txtDate2 & "#)"
strSQL = strSQL & " Or ([Date_End] BETWEEN #" & Me.txtDate1 & "# AND #" & Me.txtDate2 & "#))"
'Debug.Print strSQL
If IsNull(DLookup("[Column1]", "Table1", strSQL)) = True Then
coun = coun
Else
coun = coun + 1
End If
Next i
我更新了我的答案。谢谢你的回答。当我尝试运行此命令时,我得到一个
运行时错误“3075”:查询表达式中的语法错误(缺少运算符),在第一行strSQL中,如果不是像*AT 1/“&I&”*“
要包含i
,我更新了答案。谢谢你的回答。当我尝试运行这个程序时,我得到一个运行时错误“3075”:第一行strSQL中查询表达式中的语法错误(缺少运算符),如果它不是像*at1/”&I&“*”
一样包含I
?您可能还必须应用日期值的显式格式:“[date\u Beg]]Between#”&Format(Me!txtDate1,“yyyy\/mm\/dd”)和“#和…”
。您可能还必须应用日期值的显式格式:“[date\u Beg]]介于“#”和格式(Me!txtDate1,“yyyy\/mm\/dd”)和“#和…”
。