Database 比较MS Access中的日期,其中日期>;=';2016年1月1日&x27;

Database 比较MS Access中的日期,其中日期>;=';2016年1月1日&x27;,database,ms-access,ms-access-2010,ms-access-2013,Database,Ms Access,Ms Access 2010,Ms Access 2013,我知道这个问题已经被问过好几次了,但我认为这有点独特。 我有一个MS Access数据库,其中有一个DateTime字段,我需要将该字段与日期>='1/1/2016'或任何其他日期进行比较 我的基本问题如下 SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs 为了与日期进行比较,我知道我必须在Dtime>=#1/1/2016的地方进行比较# 问题是,日期/时间比较会自动输入到我正在运行的另一个软件中,因此语法无法更改 SELECT

我知道这个问题已经被问过好几次了,但我认为这有点独特。 我有一个MS Access数据库,其中有一个DateTime字段,我需要将该字段与日期>='1/1/2016'或任何其他日期进行比较

我的基本问题如下

SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs
为了与日期进行比较,我知道我必须在Dtime>=#1/1/2016的地方进行比较#

问题是,日期/时间比较会自动输入到我正在运行的另一个软件中,因此语法无法更改

SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs WHERE DTime >= '1/1/2016'
整个WHERE子句是根据我指定的DateTime字段自动输入的

我尝试了以下几点

SELECT TOP 100 CDate(Format([DTime], 'mm/dd/yyyy hh:nn:ss AM/PM')) AS LogTime, PEvent, FName, LName FROM EventLogs WHERE 'DTime' >= '1/1/2016'
这会带来结果,但不幸的是,它无法在日期上正确比较。有人知道我怎样才能做到这一点吗?任何帮助都将不胜感激

先谢谢你

在启用ANSI 92的情况下,软件与数据库之间的连接采用ODBC连接


正确,将生成整个“WHERE DTime>=”1/1/2016“语句 由其他软件创建,无法编辑

正如Brad已经评论的那样,这不是Access SQL,因此永远不会起作用

您唯一的选择是将查询更改为传递查询,该查询将发送以下内容:

SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs WHERE DTime >= '1/1/2016'

对于理解语法的SQL Server来说。

SQL语句永远是字符串,一个字符序列。它可以是VBA代码中的字符串变量或常量,也可以是查询对象的
SQL
属性。在任何情况下,可在执行前对其进行操纵: 在查询对象中:

MyQuery.SQL=Replace(MyQuery.SQL, "'", "#")
MyQuery.Execute
在VBA中:

Dim Dbs As DAO.Database
Set Dbs = CurrentDB 'Could also be: Set Dbs = OpenDatabase(DatabaseFileLocation)
Dbs.Execute Replace("SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs WHERE DTime >= '1/1/2016'", "'", "#")
或者可以是:

Dbs.Execute "SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs " & Replace("WHERE DTime >= '1/1/2016'", "'", "#")
想法是:如果Access可以运行它,Access可以事先修改它。

如果未修改语句,则子句将在
String
值上执行,而不是在
DateTime
值上执行

为了澄清,这个位:DTime>='1/1/2016'是自动生成的,您不能编辑吗?正确吗?为什么
'DTime'
在引号中?您能否进一步说明“问题是,日期/时间比较自动输入到我正在运行的另一个软件中,因此语法无法更改。”这意味着什么?这是否意味着在其他软件中添加了整个
,其中DTime>=“1/1/2016”
?其他软件是什么?如何在其中进行查询?正确,整个“WHERE DTime>=”1/1/2016“语句是由其他软件生成的,无法编辑。只能编辑WHERE子句之前的语句。我认为在Access中集中精力生成正确的输出比处理外部软件更容易。因此,我需要在始终使用
WHERE DTime>='1/1/2016'
时创建正确的输出。不幸的是
WHERE DTime>='1/1/2016'
在语法上不正确。如果你不能改变你是一个SOL。没有办法写SELECT语句来正确处理比较?连接到MDB文件的其他ODBC驱动程序如何?我现在正在将64位Access MDB驱动程序与系统DSN一起使用。这些选项只是建议,可以以更适合您的系统的方式实现,只需遵循最后一个想法:如果Access可以运行它,Access可以事先修改它。