我很惊讶WHERE Format([TimeStamp]...
在针对Access数据库引擎(ACE)的ADO查询中工作,但显然它确实如此。
我当然同意在Microsoft的文档中很难找到有关使用某些Microsoft功能的具体细节。我想这有助于保持像业务堆栈溢出这样的网站。 ;)
至于你.Filter
的问题,在这种情况下使用Format()
确实失败了,大概是因为Format()
是一个VBA函数,而不是(总是)可用于表达访问应用程序本身之外。但是,以下测试表明...
rst.Filter = "[TimeStamp] >= #2013/04/11# AND [TimeStamp]<#2013/04/12#"
...确实有效。 ( - 00:00:00
- 当用于DateTime值然后午夜没有指定时间假设。)
测试数据:
ID TimeStamp
1 2013-04-10 21:22:00
2 2013-04-11 02:34:56
3 2013-04-11 04:45:15
测试代码:
Sub foo()
Dim con As ADODB.Connection, rst As ADODB.Recordset
Set con = New ADODB.Connection
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\Gord\Desktop\Database1.accdb;"
Set rst = New ADODB.Recordset
Debug.Print "Test 1: WHERE Format([TimeStamp]..."
rst.Open _
"SELECT * FROM [TimeStampData] " & _
"WHERE Format([TimeStamp], ""yyyy/mm/dd"") = Format(#2013/04/11#, ""yyyy/mm/dd"")", _
con, adOpenKeyset, adLockOptimistic
Debug.Print "Records returned: " & rst.RecordCount
rst.Close
Debug.Print
Debug.Print "Test 2: Filter"
rst.Open "SELECT * FROM [TimeStampData]", con, adOpenKeyset, adLockOptimistic
Debug.Print "Total records: " & rst.RecordCount
rst.Filter = "[TimeStamp] >= #2013/04/11# AND [TimeStamp]<#2013/04/12#"
Debug.Print "Filtered records: " & rst.RecordCount
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
End Sub
测试结果:
Test 1: WHERE Format([TimeStamp]...
Records returned: 2
Test 2: Filter
Total records: 3
Filtered records: 2
请注明您所使用的MS Access版本。如果您可以提供您正在遇到的功能,字段,字段格式和错误的示例,这也会很有帮助。 – Taliesin 2013-04-10 16:06:17
@Taliesin,更新了问题 – Maksee 2013-04-11 08:25:58