按时访问过滤器

Access filter on time

我有一个 table,在 MSSQL2k8R2 服务器上的日期时间字段中有一个时间。我已经在 Access 2007 中链接了 table。table 是使用 Microsoft 的迁移助手迁移的。

即Managemanstudio 将在 SELECT TOP 3 [AbZeit], [AbBrP] FROM [dbo].[tSollFahrten] 上给出结果

AbZeit                  AbBrP
1899-12-30 12:53:00.000 LOR
1899-12-30 09:27:00.000 BAT
1899-12-30 10:54:00.000 LOR

当我要打开一个 ADO 记录集并设置一个过滤器时,它工作正常(但很慢)。

Dim rs As New ADODB.Recordset
rs.Open "Select * from tSollFahrten;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.Filter = "AbZeit=#12:53#"
Debug.Print rs.RecordCount
rs.Close

结果是一个记录集。但是打开已经过滤的记录集根本不起作用。我没有结果。

Dim rs As New ADODB.Recordset
rs.Open "Select * from tSollFahrten where AbZeit = #12:53#;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Debug.Print rs.RecordCount
rs.Close

有人知道那里发生了什么吗?

由于它是 Date/Time 类型,我建议您寻找完整的日期和时间。像,

Dim rs As New ADODB.Recordset

rs.Open "SELECT * FROM tSollFahrten " & _
        "WHERE AbZeit >= #1899-12-30 12:53:00# AND AbZeit <= #1899-12-30 12:54:00#;" , _
        CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Debug.Print rs.RecordCount

rs.Close

这两种说法有一个重要的区别:

rs.Open "Select * from tSollFahrten;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.Filter = "AbZeit=#12:53#"

==> 在这种情况下,您首先从 SQL 服务器获取数据,使用 SQL 服务器语法 ,然后过滤它们 本地 使用访问语法.

rs.Open "Select * from tSollFahrten where AbZeit = #12:53#;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

==> 在这种情况下,您可以使用 SQL SERVER SYNTAX 执行所有操作。但是,Hashtag ## 是 Access 特有的,SQL Server 不理解它。

编辑: 在SQL 服务器中,您可以这样查询小时和分钟:

rs.Open "Select * from tSollFahrten where datepart(hh, AbZeit)=12 and datepart(mi, abZeit)=53", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

问题是,时间在 SQL 服务器中存储为 datetime。所以链接 table 中的字段是 datetime。当时间在 SQL 服务器中存储为 time(7) 时,链接 table 中的字段将获得 text。然后 select 将按预期与 AbZeit='12:53' 一起工作。