【问题标题】:Comparing dates from SQL Server linked table in Access比较 Access 中 SQL Server 链接表中的日期
【发布时间】:2017-09-20 21:10:37
【问题描述】:

我在 Access 中有一个 SQL Server 链接表,我正在尝试查询以从某个日期或数据范围中提取(例如,< 01/31/2017)。我在 Access 设计模式下尝试了以下条件:< #01/31/2017#,但比较不正确。

SQL server 表中的字段是datetime 数据类型,我在Access 设计模式的属性中将其格式化为Short Date。

SELECT dbo_LicensesLiveViewWithRevenue.BAN, 
       dbo_LicensesLiveViewWithRevenue.PTN, 
       dbo_LicensesLiveViewWithRevenue.SOC, 
       dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn, 
       Format([DeactivationDate],"Short Date") AS DeactOn, 
       dbo_LicensesLiveViewWithRevenue.RetailPrice, 
       dbo_LicensesLiveViewWithRevenue.WholeSalePrice, 
       dbo_LicensesLiveViewWithRevenue.AccountID
FROM dbo_LicensesLiveViewWithRevenue
WHERE (((dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn)< #2017/01/31#)) ORDER BY dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn;

我还尝试了将日期作为表单参数传递的查询,但没有运气。

SELECT dbo_LicensesLiveViewWithRevenue.BAN, 
       dbo_LicensesLiveViewWithRevenue.PTN, 
       dbo_LicensesLiveViewWithRevenue.SOC, 
       dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn, 
       Format([DeactivationDate],"Short Date") AS DeactOn, 
       dbo_LicensesLiveViewWithRevenue.RetailPrice, 
       dbo_LicensesLiveViewWithRevenue.WholeSalePrice, 
       dbo_LicensesLiveViewWithRevenue.AccountID 
FROM dbo_LicensesLiveViewWithRevenue
WHERE (((dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn)<[Forms]![MainForm]![EndDate]));

结果:

当我直接在 SQL Server 中运行查询时,会为我提供具有正确日期的正确记录(在 SQL 中,日期为

【问题讨论】:

  • 请显示不想要的结果,因为比较不正确并且没有运气对我们没有帮助。 我做错了什么? ...我们甚至不知道出了什么问题。
  • 我添加了更多信息。
  • 试试#01/31/2017#CDate("2017-01-31")
  • 其他事情正在发生。即使是第一个示例中的相同日期 - 2015 年 12 月 8 日 - 也不会一起排序。所以,不知何故,你也在其他一些领域进行排序。 进一步,字段DeactOn 不应该为空。

标签: sql sql-server ms-access date-comparison linked-tables


【解决方案1】:

我建议您在设计视图中打开链接表。忽略有关此操作为只读的提示消息)。

如果有问题的列是较新的日期时间格式 (datetime2),并且您使用标准 SQL 驱动程序进行链接,那么此类日期将被视为 TEXT 列,而不是日期/时间。

如果这些列被访问视为日期或文本列,那么在设计视图中快速查看链接表将会很有趣。

如果您使用来自 SQL Server 的任何较新格式的日期,当您将表链接到 SQL Server 时,您必须使用较新的本机 11(或更高版本)驱动程序。正是出于这个原因,我倾向于坚持使用较旧的“默认”遗留 SQL 驱动程序。旧版驱动程序已安装并包含在 Windows 中 - 因此,当您在每个工作站上运行 Access 时,无需安装驱动程序。

但是,如果您在 SQL Server 中使用较新的日期格式,则需要使用本机 11 驱动程序链接表,并且除了 Access(或Access 运行时)。因此,虽然人们应该更喜欢并使用较新的 SQL 驱动程序,但缺点是这些驱动程序必须安装在每个工作站上。

因此,请仔细检查 Access 在表格设计模式下显示的那些列的数据类型 - 如果它们是文本,那么您需要重新链接本机 11 驱动程序。

【讨论】:

  • 感谢您的好意,不要对答案投反对票。你不知道我在当前项目中的压力。我只是想分享我的解决方法。但由于 IT 行业的世界贫困将受到影响,我决定删除我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 2021-11-03
相关资源
最近更新 更多