【发布时间】:2017-04-14 20:20:51
【问题描述】:
编辑:问题底部的已回答/解决方法。
我已经看到了关于这个错误的所有其他问题,但我非常肯定这是一个独特的场景。
我几乎正在使用 JavaScript 从一个自建网站管理一个 Access 数据库,但我遇到了以下问题:
var evDate = new Date(hDate);
evDate.setFullYear(evDate.getFullYear() + 1);
evDate = evDate.toLocaleDateString().toString();
var SQL = "INSERT INTO PendingChanges([Eval Date]) VALUES ('" + evDate + "')";
这提供了以下字符串:
"INSERT INTO PendingChanges([Eval Date]) VALUES ('04/19/2018')"
在 IE9 中这工作正常,但在 IE11 中它给了我错误“标准表达式中的数据类型不匹配。”
如果我改用 hDate 值,它来自带有日期选择器的输入,而不添加年份:
var SQL = "INSERT INTO PendingChanges([Eval Date]) VALUES ('" + hDate + "')";
我将得到以下字符串:
"INSERT INTO PendingChanges([Eval Date]) VALUES ('04/19/2017')"
这在 IE9 和 IE11 上运行良好。一种解决方法是我什至在 hDate 输入上添加“onchange”,使用此触发器获取值并将其转换为添加了年份的日期,将这个新值传递给另一个输入,然后传递这个新输入到主要功能。我试图避免这样做。
任何想法为什么 IE11 没有“看到” evDate 上的字符串值是有效的? (相信我,它看起来与 hDate 相同,唯一的区别是 2017/2018)。
编辑:这就是我使用 SQL 变量对数据库进行查询的方式。
var pad = "Access Database File Path";
var cn = new ActiveXObject("ADODB.Connection");
var strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pad;
cn.Open(strConn);
var rs = new ActiveXObject("ADODB.Recordset");
rs.Open(SQL, cn);
//if i close the rs after the rs.Open, the function returns an error that the change can not be completed on a closed connection, so i just close the connection.
cn.Close();
编辑 2:回答
我找到了一个更简单的解决方法。我没有使用 3 行代码用 hDate 创建日期,而是添加一年并将其更改为短日期字符串,我使用了 moment.js
var evDate = moment(hDate).add(1, 'year').format('MM/DD/YYYY');
这返回的值与我之前使用的相同,但它允许该函数在 IE9 和 IE11 中都能正常工作。
感谢所有关注我的问题的人以及那些试图帮助我的人。
【问题讨论】:
-
您如何使用
SQL变量? -
不要尝试将代码放在问题中,编辑问题以澄清。
-
我已经用代码编辑了问题。谢谢。
标签: javascript ms-access internet-explorer-9 internet-explorer-11