机缘巧合,为了省事和轻便安装了access数据库,也是为了省事 写了node服务,来解决http请求一些列的操作。
网上搜索了一圈,都是通过odbc来解决access 和 nodejs 之间的联系,那么我就开始着手解决,我的系统环境:win10 + node 12.1 + access2013 64位
这里特别强调: access的db创建的版本与使用版本与odbc的版本必须一致 ,我在这里踩过坑,我把32位建的access db 拿到64位的access使用就出现问题
1.odbc的配置
注意一定是统一: 64位置odbc 配置 access 也是64位
2.node 编写
node需要安装odbc,我直接安装了一个最新版本
"_id": "odbc@2.3.6",
测试脚本按照 npm里面 odbc给的脚本测试即可
写到这里看似简单,中途遇到的问题 解题思路也是千奇百怪
access版本问题与odbc的版本不一致的问题
也测试了js脚本 js 采用 ActiveXObject 来创建adodb 来解决, 当时考虑node里面有ActiveXObject 这个对象么?网上还有人真这么干 ,大家有兴趣可以搜来看看
在解题思路上越跑越偏 附上js的执行connectString
var connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\ATest.mdb;Persist Security Info=False"; try { var ocon = new ActiveXObject("ADODB.Connection"); // 打开连接 ocon.Open(connectString, "", ""); // ConnectionString, UserId, Password // 如果出现:”未找到提供程序。该程序可能未正确安装。“,请注册OracleODBC //Debug.writeln("connect ok!"); // 1.查询数据 var ors = new ActiveXObject("ADODB.Recordset"); ors.ActiveConnection = ocon; ors.Source = "select * from Task"; ors.Open(); // strCommand,ActiveConnection,int CursorType,intLockType, intCommandType //Debug.writeln("select ok!"); while(!ors.EOF) { var tokenID = ors.Fields(0);// Fields[FieldNo]: Fields[FieldNo] var changeCode = ors.Fields(1); //Debug.writeln(Mgr.DefaultObject.Hex2Str(changeCode)); //Debug.writeln("TokenID=" + tokenID + "\tChangeCode=" + changeCode); ors.MoveNext(); } ors.Close(); // var ocmd = new ActiveXObject("ADODB.Command"); // ocmd.ActiveConnection = ocon; // ocmd.CommandText = "update aaa set ChangeCode='' where TokenID='TDR000000010'"; // ocmd.Execute(); } catch(e) { //Debug.writeln("ERROR:" + e.message); throw e; }