因此,我从以下SQL查询中获取了所需参数错误的No值:
query = "SELECT *, DATEDIFF(DAY, [Target Completion Date], DATE()) AS Cert FROM [Project Status$] WHERE Cert < 20"
我尝试在过滤器值中添加引号(即:'20'),但我没有得到正确的值(显然)。如果我要删除WHERE子句,它查询就好了。最初,我打算做以下事情:
query = "SELECT * FROM [Project Status$] WHERE [Days to Target Date] < 20"
但是[天数到目标日期]列中的值是这样计算的,并且在有符号整数和字符串“完成”之间有所不同:
=IF(AD1="",IF(I1="","",J1-TODAY()),"Complete")
我无法使用WHERE [目标日期天数]&lt; 20,因为它抛出了数据不匹配错误,所以我选择进行DATEDIFF计算。谁知道这可能是什么情况?这是我目前正在使用的代码和the data:
Sub GetData()
On Error GoTo ErrorHandler
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim conStr As String
Dim wbFile As String
Dim query As String
Dim row As Long
wbFile = Application.ActiveWorkbook.Path & "\Status Sheet.xlsx"
conStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & wbFile & _
"; Extended Properties=""Excel 12.0 Xml; HDR=YES; IMEX=1"";"
query = "SELECT *, DATEDIFF(DAY, [Target Completion Date], DATE()) AS Cert" & _
" FROM [Project Status$] WHERE Cert < 20"
row = 2
initSheet
cnn.Open conStr
rs.Open query, cnn, adOpenStatic, adLockOptimistic
...
ErrorHandler:
cnn.Close
Set rs = Nothing
End Sub
编辑:感谢winghei和Axel,最终得到了这个东西。这是有效的查询:
query = "SELECT * FROM [Project Status$] " & _
" WHERE DATEDIFF(""d"", DATE(), [Target Completion Date]) < 20" & _
" AND [Days to Target Date] <> ""Complete"" "
" ORDER BY [Days to Target Date] ASC"
答案 0 :(得分:0)
尝试。或参见https://support.office.com/en-us/article/DateDiff-Function-e6dd7ee6-3d01-4531-905c-e24fc238f85f
SELECT * FROM [Project Status $] WHERE DATEDIFF(&#39; d&#39;,[Target Completion Date],DATE())&lt; 20