我在Access中的链接表上执行了以下查询:
选择*来自表格WHERE DateField =#18-Dec-2016#
使用以下VBA代码创建此日期where子句:
strWHERE = strWHERE& “DateField =#”& VBA.Format(txtDate,“dd-mmm-yyyy”)& “#”
使用完整版Access 2016时,它将发送到SQL:
选择*来自表格WHERE DateField = {d 18-Dec-2016}
这个有效!但是,使用Access 2016运行时时,它将作为以下内容发送到SQL:
选择*来自表格WHERE DateField = {ts 18-Dec-2016}
它失败了。
我正在使用SQL Server Profiler来查找正在发送的确切SQL。
有什么想法吗?
编辑:
尝试将格式更改为yyyy-mm-dd
尝试将“00:00:00”添加到构建where子句的VBA代码中,这不会改变我通过探查器发送给SQL的内容。
解决:
出于某种原因,链接表查询的行为在完整版本的Access和2016 Runtime之间是不同的。
在运行时版本中,链接表中字段的数据类型用于格式化查询。因为DateField是DateTime,它将where子句作为ts传递。通过创建视图并将日期格式化为日期,这已经解决了。