【问题标题】:Access filter on time准时访问过滤器
【发布时间】:2015-08-31 22:57:48
【问题描述】:

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

即Managemantstudio 将在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

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

【问题讨论】:

  • 它会与= #1899-12-30 12:53#一起运行吗?
  • 没有。还是没有结果。
  • 使用 ADO 6.1,我尝试在这里使用 Access 2013 运行类似的代码,并且两个版本都以预期的结果运行(相同的记录数)。所以还有其他事情发生
  • @Gustav 您是否将 Access 连接到 SQL Server ?
  • 是的,通过 ODBC 的链接表。服务器版本 10.50.4297。

标签: sql-server sql-server-2008 ms-access vba ms-access-2007


【解决方案1】:

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

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

==> 在这种情况下,您首先使用 SQL SERVER SYNTAX 从 SQL Server 获取数据,然后使用 ACCESS SYNTAX LOCALLY 过滤它们

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

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

编辑:在 SQL Server 中,您可以像这样查询小时和分钟:

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

【讨论】:

  • 我同意,这非常有趣。
  • 你忘了这是一个链接表。然后是 Access SQL,而不是 T-SQL。如果是 T-SQL,where AbZeit = #12:53# 会出错。
  • 我知道其中的区别。这就是为什么我不想使用 Access 中的过滤器的原因。 @Gustav 你是对的。链接的表是 Access SQL。
  • @Stefan 你确定你有没有 on error resume next,以防万一你监督查询中的错误?
  • 是的。我确定。我忘记了调试第三定律。 “不是错误,您正在寻找的地方,它在其他地方”。我刚刚发布了我的解决方案。
【解决方案2】:

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

【讨论】:

  • 有趣。所以您的解决方案是将字段类型从 datetime 更改为 time(7) ?而你仍然用#12:53#查询?
  • 是和不是。 @SQLPolice 现在它必须是 '12:53',因为现在它是用于访问的文本。
【解决方案3】:

由于它是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

【讨论】:

  • 很抱歉 - 仍然没有结果。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2023-03-05
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多