善用ActiveX对象.

不少人对windows平台下特有的ActiveX对象颇有微词 -- JS创建Web对象时不兼容其他浏览器;还时常带来不少系统安全问题等等...

个人觉得,MS提供 ActiveX控件对象只是想让广大开发者能够简便调用,以便获得与系统更好的交互罢了.我们也应当看到其积极的一面。只要我们善用这些 ActiveX控件对象,在日常的工作中或开发一些小应用也是非常的便捷、省事。

就如今天在一Witkey网站接洽到一位开发需求者,其要求采集澳门某博彩网站的赔率,并存入Access数据库。
(我开价2K但对方表示只有300 元预算 多付一元也不乐意,够狠! ... 好吧,念及其要求不高,再则时下物价飞涨,能赚多少就多少吧。)

对方的需求很明了简单,既然是Access自然无须考虑什么跨平台了. 整个流程也就是获取网站的数据,简单处理后写入数据两个步骤而已。

打开注册表HKEY_CLASSES_ROOT看看有哪些 ActiveX对象可以调用, Msxml2.XMLHTTP、Msxml2.DOMDocument、ADODB.Connection、ADODB.Recordset...够了,利用 hta(HTML Application)加上这几个ActiveX对象就足可以完成任务了。

第一步获取远程网站xml数据:

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.onreadystatechange =function(xml){
	if (xmlhttp.readyState == 4) 
	  // alert(xmlhttp.responseXML.xml);
          //处理xml 略...	
    }
    xmlhttp.open("GET",'http://www.macauslot.com/soccer/xml/odds/odds_config.xml',true);
    xmlhttp.send();

第二步,利用 ADODB组件对象操作Access写入数据:

var connection=new ActiveXObject("ADODB.Connection");
var rs=new ActiveXObject("ADODB.Recordset");  
var connectString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";
    connection.open(connectString);
    connection.execute("INSERT INTO odds VALUES ...");//增删查sql语句
    //略...

用CSS适当修饰界面以及一些html表单元素,完成代码编写后保存为hta,双击运行. OK,打完收工! 前后用时包括与对方洽谈不到40分钟,300元顺利入袋,hehe~ 够简单吧?!!! 
而且hta程序适用于windows所有系统,无论是老掉牙的win2K 还是最新的win8,也不论是32位还是64位,都可以顺畅运行,运行速度超java,媲美C/C++ .

所以,我们平时工作或开发时,适当灵活地使用windows系统的特性和组件,就可以事半功倍.而不一定事无大小 就上java、C# 等这些拖着笨重的"乌龟壳"开发环境、又或者C/C++这些开发周期慢 调试麻烦的工程. 

function JSDB(){
  this.connection = null;
  this.rs = null;
}

//初始化连接
//db_file 数据库文件名
JSDB.prototype.init = function(db_file){
  try{ 
    this.connection=new ActiveXObject("ADODB.Connection"); 
    this.rs=new ActiveXObject("ADODB.Recordset"); 
    var connectString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+db_file;    
    this.connection.open(connectString);     
    return true;
  } 
  catch(e) { 
    alert("连接数据库时发生异常:\r\n"+e.name+" : "+e.message);
    return false;
  } 
}

//查询数据库
//query 查询语句
//queryFunc 对查询结果进行操作的函数,可以没有
JSDB.prototype.query = function(queryString,queryFunc){
  try{
    this.rs=this.connection.execute(queryString); 
    if(queryFunc){
      queryFunc(this.rs);
    }
  }catch(e){
    alert("查询时发生异常:\r\n"+e.name+" : "+e.message);
  }
}

//关闭数据库连接
JSDB.prototype.close = function(){
  try{
    this.rs.close();
    this.connection.close();
    return true;
  }catch(e){}
}

你可能感兴趣的:(善用ActiveX对象.)