日期转换错误 - MS Access前端查询SQL后端
我试图从SQL数据库和Access数据库执行SQL时遇到日期转换错误。我们的机器全部运行带有office 2010的windows 7。前端是accde。日期转换错误 - MS Access前端查询SQL后端
数据库中有一个搜索表单,除了两个日期字段外,所有字段都可以正常工作。
查询是where子句看起来像这样在前端基于一些研究VB代码
"WHERE DrawnDate BETWEEN #" & Format(FromDate, "yyyy-mm-dd") & "# AND #" & _
Format(ToDate, "yyyy-mm-dd") & "#"
,我也尝试过的dd-mon-yyyy
和dd-mm-yyyy
日期格式,在结果没有变化。
The expression On Click you entered as the event property setting produced the following error: ODBC -- call failed.
收到的错误是:
[Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting date and/ or time from character string. (#241)
的另一个问题是,这只是发生在一台PC上,到目前为止,而不是我的或别人认为我已经测试。
这是一个Microsoft office错误。
此问题主要发生在宏/ VBA中有任何“参考问题”时。
按照以下步骤
- 转到Visual Basic编辑器或按(Alt + F11)
- 点击菜单上的工具 - >参考
- 取消任何库引用以单词“缺少启动: ......”
- 现在试图执行一个查询
的问题是,你的查询是否是一个传递查询或不(T事实上这张桌子是相互关联的)。如果查询是Pass-Through,那么您必须将其写入SQL-Server方言,否则使用Access方言。传递是查询的属性,而不是表格的属性。
另一点是日期是否在SQL-Server的有效日期范围内。这些范围是Access和SQL-服务器不同:
SQL-Server
datetime (January 1, 1753 - December 31, 9999)
datetime2 (January 1, 0001 to December 31, 9999)
smalldatetime (January 1, 1900 to June 6, 2079)
date (January 1, 0001 to December 31, 9999)Access
Date/Time (January 1, 100 A.D. -December 31, 9999 A.D.)
0(默认值)的日期值代表1899年12月30日,在访问这个位于smalldatetime
范围的SQL服务器之外。
如果传递给它的值是String
,则Format
函数不起作用。确保FromDate
和ToDate
变量在VBA中声明为As Date
,或者它们是包含日期的变体。在后一种情况下,VarType(FromDate)
应返回7
(= vbDate
)。如果他们是变体,他们也不应该是Null
。
我们在一台机器上发现了完全相同的错误,并通过删除然后重新添加对DAO360.DLL的引用(在Visual Basic工具 - >引用下)来解决它。它从来没有表现为失踪。
这绝对不是传递(即使用链接表),因为#日期文字终止字符绝对是一个Access/Jet的东西。在“重新引用”之后,ODBC跟踪显示了发送到SQL Server的实际SQL的生成中的更改。
这对我来说是+1 – Spasticmonkey
该SQL是否直接通过**到SQL Server?如果是这样,我认为它不会喜欢哈希字符。如果是这种情况,可以尝试将哈希字符改为单引号。另外,你能确认DrawnDate是一个DateTime列吗? –
不,它不直接通过访问中的表格链接表。这就是为什么引号必须在那里(这是我的第一个想法:) DrawnDate是SQL日期时间类型。对我来说真的很奇怪的是它在大多数机器上都能正常工作,但在一台机器上无法正常工作......并且它始终使用这个日期字段! – goneos
嗯。那么不确定。不好意思,朋友。我可能会建议检查你的ODBC连接,从无法正常工作的机器。检查所有设置(语言和全部),并确保它们都一样。 –