【发布时间】:2015-02-18 16:19:16
【问题描述】:
如果在包含日期的特定字段中没有空白记录,我有以下 vba 查询可以正常工作。当特定记录中存在空白时会发生错误。
我要做什么?:从我的数据库中提取一个日期范围内的计数。开始日期和结束日期是格式为“MM/DD/YYYY”的单元格引用,包含日期的日期库字段格式为日期/时间,“短日期”。
如果我的字段列不包含任何空白,则该查询有效:
Dim startdate As Date
Dim enddate As Date
strSql = "SELECT Count(*) FROM tablename WHERE datevalue(Date_field_name) >= " & Format(startdate, "\#mm-dd-yyyy\#") & "AND datevalue(Date_field_name) <= " & Format(enddate, "\#mm-dd-yyyy\#")
我尝试添加 IS NOT NULL 但这不起作用:(
strSql = "SELECT Count(*) FROM tablename WHERE ANOTHER_Field_Name IS NOT NULL AND datevalue(Date_field_name) >= " & Format(startdate, "\#mm-dd-yyyy\#") & "AND datevalue(Date_field_name) <= " & Format(enddate, "\#mm-dd-yyyy\#")
请帮帮我!!这让我发疯了。
编辑完整代码:
Public Sub counter()
Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim myCounter As Variant
Dim startdate As Date
Dim enddate As Date
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=Data.mdb"
strSql = "SELECT Count(*) FROM tablename WHERE datevalue(Date_field_name) >= " & Format(startdate, "\#mm-dd-yyyy\#") & "AND datevalue(Date_field_name) <= " & Format(enddate, "\#mm-dd-yyyy\#")
cn.Open strConnection
'Set rs = cn.Execute(strSql)
While (rs.EOF = False)
If (Not IsNull(rs(Sent_To_Tech_Date).Value)) Then
myCounter = myCounter + 1
End If
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
【问题讨论】:
-
您的“Date_field_name”字段是什么数据类型?
-
@Newd 日期/时间短日期
-
我认为你根本不需要做 datevalue 的事情。
-
您打算如何设置 startdate 和 enddate 变量?
-
我从 excel 的两个单元格中获取这些值