按时访问过滤器
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'
一起工作。
我有一个 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'
一起工作。