Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在带有字符串和日期的循环中使用Dlookup的语法_Sql_Vba_Ms Access - Fatal编程技术网

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”)和“#和…”