`

Access转出到Mysql,咱自己动手丰衣足食.. -- 纯JS代码

阅读更多

公司的网站做的差不多了,可是没有找到测试数据,真够郁闷的,就想到了 Access罗思文数据库.

 

可是机器上装的是WPS,没有装Access. 而且罗思文里面东西太多,很难搞.

 

郁闷死我了,又往下找,找到了以前某出版社的书序目录数据库,

使用mdbview这个小软件一看,呵呵.里面只有一个表: books.还有4000多条记录.

太爽了. ... 问题出现了,我怎么把它弄到Mysql里面呢???? 这个倒来倒去的很麻烦啊

 

想到这里,先想到的是使用PHP来做,我一向使用的是FLEAPHP框架,很愁人的是没有这个驱动库提供.

又想到了PHP的 ADODB这个开源库.下了一个,很郁闷,感觉是很强,但是远水解不了近渴啊,

偶估计等我把他那英文文档看明白了,天也要黑了....

所以一票否决使用PHP来搞...

 

接着想到了JAVA,以前好像学过JAVA提供的JDBC驱动,想到啊,不错啊... 结果很快报异常....时间都浪费在

调异常上面了.... 花了我一刻钟 ... 真的很郁闷. ..

 

偶然想到ASP不是挺能搞Access的么? 找来找去那玩意都需要运行环境来支持.....

 

郁闷的不行,突然想到了IE上实现Ajax的代码,创建ActiveXObject对象,我当时就在想这个对象不知道能不能在本地跑啊.

因为系统里面已经带了脚本运行时环境.... 三分钟后,哈哈可以啊,竟然可以在本地....

 

接着看到还支持文件系统的读写,叫一网友发了一本ASP的老书,仔细看了看ADO的语法,呵呵呵.还真行...

一会儿就OK了,但是还是有问题存在,妈妈的,幸亏我看的懂VB的语法,不然还真不能换成JS来实现....原来ASP换能使用JS

来写,日 第一次知道....

 

闲话少说,贴代码了. 这里仅仅贴出JS怎么将Access里面的数据存到本地的文件的功能.... 具体导出到MYSQL的做法

你们自己想了,反正很简单....

 

function ShowDriveInfo1(drvPath)
{
   var fso, drv, s ="";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   drv = fso.GetDrive(fso.GetDriveName(drvPath));
   s += "Drive " + drvPath.toUpperCase()+ " - ";
   s += drv.VolumeName + "<br>";
   s += "Total Space: " + drv.TotalSize / 1024;
   s += " Kb" + "<br>"; 
   s += "Free Space: " + drv.FreeSpace / 1024;
   s += " Kb" + "<br>";
   writeFile(s);
}

var fso = new ActiveXObject("Scripting.FileSystemObject");;
var outdb = fso.CreateTextFile("testfile.txt", true);;

//ShowDriveInfo1('d:',true);

function writeFile(s)
{
   outdb.WriteLine(s);     
}


var cn = new ActiveXObject("ADODB.Connection") ;
var result = new ActiveXObject("ADODB.Recordset");
cn.Open("FILEDSN=books.dsn");
writeFile(cn);

/*
设置或返回游标服务的位置,防止返回记录数为-1
有疑问的是 为什么要设值为3呢??

3表示使用由本地游标库提供的客户端游标,而缺省是服务端设置

result.MoveLast(); //行集不支持反向取

*/

result.CursorLocation = 3;  
var sql = 'select * from books' ;
result.Open(sql,cn);

writeFile('exec sql : ' + sql);
writeFile('result.RecordCount : ' + result.RecordCount);

 var fields = {
	 objID: result("ID"),
	 objBookCode: result("BookCode"),
	 objBookName: result("BookName"),
	 objPrice: result("Price"),
	 objAuthor: result("Author"),
	 objBooksPerPack: result("BooksPerPack"),
	 objYear: result("Year"),
	 objISBN: result("ISBN"),
	 objOther: result("Other")
 };
 
 
 
 
 for (var i=0;i< result.RecordCount  ; i ++)
 {	
	var tmpss = '' ; //每次都要置空,刚才没有注意,3秒钟就跑到了580M.
	for (field in fields)
		tmpss += fields[field] + '\t\t' ; 
	writeFile(tmpss);
	result.MoveNext();	
 }
 
result.Close();
cn.Close();
outdb.Close(); 

fso = null ;

 

这里看看这个运行结果吧:

写道
Provider=MSDASQL.1;Extended Properties="DBQ=D:\book.mdb;DefaultDir=D:\;Driver={Driver do Microsoft Access (*.mdb)};DriverId=281;FIL=MS Access;FILEDSN=books.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
exec sql : select * from books
result.RecordCount : 4351
1 TP68150 Linux 系统管理指南 46 吴东霞等 7 2001 750536815X null
2 TPAA0230 Linux工具集 55 王军 等 5 2004 7120000233 null
3 TN004770 Linux网络入侵检测系统 25 刘文涛 9 2004 7121004771 null
4 TP96260 Linux系统安全——开放源码安全工具管理员指南(第二版) 48 周元兴译 5 2004 7505396269 null
5 TP92970 嵌入式Linux——硬件、软件与接口 35 陈雷译 9 2003 7505392972 null
6 TP96610 Red Hat Linux实用指南 88 孙天泽译 3 2004 7505396617 null
7 TP64770 红旗Linux 网络管理教程 28 中科红旗 9 2001 7505364774 null
8 TP75450 Windows XP 注册表配置详解 25 韩江 8 2002 7505375458 null
9 TP74710 Windows 98 2000 Me XP 注册表大全 31 郝强 8 2002 7505374710 null
10 TP91960 精通注册表修改与编程 Windows 98/Me/2000/XP 29 郝强 7 2003 7505391968 nul

 

通过这次偶真的有感而发,在IE中调试JS很麻烦,但是在本地写JS脚本那个报错就要明确的多啊....很快就挑好了

 

这里出现了个很搞的东西:

var tmpss = '' ; //每次都要置空,刚才没有注意,3秒钟就跑到了580M.
因为我刚开始把它放到for循环的外面了,运行过后,打开一看,提示打开很大文件,我想不对啊?没有多大啊
我还是放到桌面上的,一会我感觉不对劲,想把它删了,结果提示正在运行,赶快结束了那个进程... 一查属性
 
乖乖,578M. 不到三秒的时间 , 好险啊...
 
大家注意啊... 改下用来 恶意下别人机器也是挺好玩的.... 
 

 

 

1
0
分享到:
评论
9 楼 vb2005xu 2009-04-02  

//获取所有表
/*
用这条语句就可以取得Access数据库中所有表,但需要设置读取MSysObjects表的权限,否则会出现“不能读取记录;在 'MSysObjects'上没有读取数据权限”的错误提示。

office 2003设置:工具 -> 选项 -> 视图 -> 勾选隐藏对象、系统对象。工具 -> 安全 -> 用户与组的权限 ,在对象名称中选定 MSysObjects ,然后权限中设置其读取权限。

office 2007设置:单击左上角图标 -> Access选项 -> 当前数据库 -> 导航 -> 导航选项 -> 勾选显示隐藏对象,显示系统对象。数据库工具选项卡 -> 用户和权限 -> 用户与组权限,对象类型选择表,对象名称选定MSysObjects,然后勾选“读取数据”权限


*/
//var sqlcmd="select name from [msysobjects] where type=1 and flags=0" ; 

var dirver = 'Driver={Microsoft Access Driver (*.mdb)};Dbq=#dbpath#/Northwind.mdb;'.replace('#dbpath#',getCurrentDir()) ;
cn.Open(dirver);

resultset = cn.openSchema(20) ;
resultset.filter="table_type='table'" ;
var fields = {
    tableName : resultset("TABLE_NAME")
}
var tmpss = '' ; 
for (var i=0;i< resultset.RecordCount  ; i ++)
{	
    for (field in fields)
        tmpss += "<span>" + fields[field] + "</span>" ;
    resultset.MoveNext();	
}
tmpss = "<div id='tableList'><h4>数据表列表</h4>#v#</div>".replace('#v#',tmpss) ;
//alert(tmpss);
$result(tmpss);  
/*
这段注释代码有误,永远少取一个表,单表无值
while(resultset.eof){
    for (field in fields)
		$result(fields[field]);    
    resultset.MoveNext();    
}
*/


8 楼 vb2005xu 2009-04-02  
放到HTML文件中出现的一些问题,主要是 文件的路径问题,
这里是以HTML文件的路径为映射点来实现的

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>本地化信息系统 -- 使用纯JScript 和 Access</title>
    <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id='result'>

</div>

<script>
function $result(msg){
    document.getElementById('result').innerHTML += msg + "<br/>" ;
}



function getDriveInfo(fso,drvPath)
{
   var drv, s ="";
   
   //alert(fso.DriveExists(drvPath)) ; //检查盘符是否存在
   
   drv = fso.GetDrive(fso.GetDriveName(drvPath));
   s += "Drive " + drvPath.toUpperCase()+ " - ";
   s += drv.VolumeName + "<br>";
   s += "Total Space: " + drv.TotalSize / 1024;
   s += " Kb" + "<br>"; 
   s += "Free Space: " + drv.FreeSpace / 1024;
   s += " Kb" + "<br>";
   return s;
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
//判断文件是否存在
var tmpfname = "G:\\JScript开发\\本地化信息系统\\tmpfile\\testfile.txt";
var outdb = null ;
if (fso.FileExists(tmpfname)){
   /*
        GetFile不能获取文件的指针,只能取相关信息,不能对文件进行读写操作
        要配合它的OpenAsTextStream(ForWriting, true);方法才能实现文件读写
        
        outdb = fso.GetFile(tmpfname).OpenAsTextStream(ForWriting, true);  
        
        ForWriting = 2 表示新建
        
     */
    var fileInfo = fso.GetFile(tmpfname) ; 
    //alert('old File last modified: ' + fileInfo.DateLastModified );
    
    var ForWriting = 2  ; 
    outdb = fileInfo.OpenAsTextStream(ForWriting,true);
    
    /**
     * 直接使用OpenTextFile可以往文件读写数据,但不能取得文件的常规信息
       比如 最后修改时间 最好是使用第一种写法
     */
    
    //outdb = fso.OpenTextFile(tmpfname,ForWriting,true);
    
} else {
    outdb = fso.CreateTextFile(tmpfname, true);
    alert('new');
}

//alert(typeof(outdb));
//取得当前页面的路径 
/*
  取点它是以桌面为当前路径的,无论此页面在哪里
C:\Documents and Settings\Administrator\桌面\tmpfile
*/
//$result("currentPath : "  + fso.GetAbsolutePathName('./tmpfile')) ;

//获取当前路径的一些测试
//$result("currentPath : "  + fso.GetParentFolderName(window.location.href)) ;

//获取当前目录
function getCurrentDir(){
    var currentPath = fso.GetParentFolderName(window.location.href) ;
    currentPath = currentPath.replace('file:///','');    
    return currentPath ;
}
function getCurrentFilePath(){
    return window.location.href.replace('file:///','');
}
$result("currentPath : "  + getCurrentDir()) ;
//fso.CreateTextFile(getCurrentDir() + '/123.txt', true);
//$result("currentPath : "  + window.location.href) ;


outdb.WriteLine(getDriveInfo(fso,"c:")) ;
outdb.WriteLine(getDriveInfo(fso,"d:")) ;
outdb.WriteLine(getDriveInfo(fso,"e:")) ;
//outdb.WriteLine(getDriveInfo(fso,"f:")) ; //这个是光盘
outdb.WriteLine(getDriveInfo(fso,"g:")) ;

//数据库操作
var cn = new ActiveXObject("ADODB.Connection") ;
var resultset = new ActiveXObject("ADODB.Recordset");
//因为初始路径在桌面,所以这样写
var dirver = 'Driver={Microsoft Access Driver (*.mdb)};Dbq=#dbpath#/book.mdb;'.replace('#dbpath#',getCurrentDir()) ;
cn.Open(dirver);
outdb.WriteLine(cn);
/*
设置或返回游标服务的位置,防止返回记录数为-1
有疑问的是 为什么要设值为3呢??

3表示使用由本地游标库提供的客户端游标,而缺省是服务端设置

result.MoveLast(); //行集不支持反向取

*/

resultset.CursorLocation = 3;  
var sql = 'select * from books' ;
resultset.Open(sql,cn);

outdb.WriteLine('exec sql : ' + sql);
outdb.WriteLine('result.RecordCount : ' + resultset.RecordCount);

 var fields = {
	 objID: resultset("ID"),
	 objBookCode: resultset("BookCode"),
	 objBookName: resultset("BookName"),
	 objPrice: resultset("Price"),
	 objAuthor: resultset("Author"),
	 objBooksPerPack: resultset("BooksPerPack"),
	 objYear: resultset("Year"),
	 objISBN: resultset("ISBN"),
	 objOther: resultset("Other")
 };
 
 for (var i=0;i< resultset.RecordCount  ; i ++)
 {	
	var tmpss = '' ; //每次都要置空,刚才没有注意,3秒钟就跑到了580M.
	for (field in fields)
		tmpss += fields[field] + '\t\t' ; 
	outdb.WriteLine(tmpss);
	resultset.MoveNext();	
 }
 
resultset.Close();

cn.close();

outdb.Close(); 
fso = null ;

</script>


</body>
</html>
7 楼 vb2005xu 2009-04-02  
较好的文件对象参考
http://www.iteye.com/topic/183111
6 楼 vb2005xu 2009-04-02  
JS FileSystemObject 对象的参考:


http://www.cnblogs.com/suiqirui19872005/archive/2007/06/03/769431.html


常用的方法:
fso.FileExists

例子:
var fso, filespec='c:\\a.txt'; 
   fso = new ActiveXObject("Scripting.FileSystemObject"); 
   if (fso.FileExists(filespec)) 
      {alert('文件存在');} 
    else 
      {alert('文件不存在');        
     var a = fso.CreateTextFile("c:\\a.txt", true); 
          a.WriteLine("这是测试文件."); 
          a.Close(); 
} 


5 楼 vb2005xu 2009-03-23  
www.cftea.com
千一网络 ,, 有几个JS效果不错
4 楼 vb2005xu 2009-03-21  
打开罗思文数据库的代码,呵呵,修改两处即可:


var dirver = 'Driver={Microsoft Access Driver (*.mdb)};Dbq=Northwind.mdb;' ;
cn.Open(dirver);
writeFile(cn);

var fields = {
	 "产品ID": result("产品ID"),
	 "产品名称": result("产品名称"),
	 "供应商ID": result("供应商ID"),
	 "类别ID": result("类别ID"),
	 "单位数量": result("单位数量"),
	 "单价": result("单价"),
	 "库存量": result("库存量"),
	 "订购量": result("订购量"),
	 "再订购量": result("再订购量"),
	 "中止": result("中止")
 };

3 楼 vb2005xu 2009-03-21  
var dirver = 'Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\\book.mdb;' ;
cn.Open(dirver);


修改一下,刚才要配置数据源,很麻烦,这样写就不用配置数据源了
2 楼 vb2005xu 2009-03-21  
对使用XMLHTTP那个对象,不熟的话看这个文章.

http://www.cnblogs.com/ejiyuan/archive/2008/01/17/1043136.html

水边解释下代码:
xmlhttp.onreadystatechange 

这个东西只在DOM下有效,在本地我不知道改用什么方法来代替,所以就使用
xmlhttp.open("GET",serverpage,false);
第三个参数为false来阻止其使用异步加载..

有知道的告诉我啊!!
1 楼 vb2005xu 2009-03-21  
下午我转换完后,还想到了一个很好玩的东西用JS来实现...

因为在本地可以调用 new ActiveXObject("Microsoft.XMLHTTP"); 所以咱们自己
可以实现某种很猥琐的想法,

比如页面上放了广告啊? 咱们可以用这个来点击,最好是配合着那种代理服务器一起来玩...

这里给个例子,教你怎么玩... 顺便说下,别用这个小功能来写木马啊...
var xmlhttp = false ;
try {
	// If javascript is greater than 5
	xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
	//alert("You are using Microsoft Internet Explorer .");
}
catch (e){
	//else will use ActiveXObject older version
	try {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		//alert("You are using old Microsoft Internet Explorer .");
	}
	catch (e){
		 
		 xmlhttp = false ;
	}
}

function appendText(obj,xmlhttp)
{
	
	if (xmlhttp.readyState == 4 && xmlhttp.status == 200 ){
		obj = xmlhttp.responseText ;
	}
}
function makerequest(serverpage,objID)
{
	 xmlhttp.open("GET",serverpage,false);
	 //xmlhttp.onreadystatechange = appendText(objID,xmlhttp) ;
	 xmlhttp.send(null) ;
	 writeFile(xmlhttp.responseText) ; ;
}




var fso = new ActiveXObject("Scripting.FileSystemObject");
var outdb = fso.CreateTextFile("testfile-ajax.txt", true);

function writeFile(s)
{
   outdb.WriteLine(s);     
}

var bb  ;
makerequest('http://localhost',bb);



outdb.Close(); 
fso = null ;




运行结果:
引用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
  <title>Index of /</title>
</head>
<body>
<h1>Index of /</h1>
<table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5"><hr></th></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="PessonalProject/">PessonalProject/</a>       </td><td align="right">04-Mar-2009 23:52  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="alltestdemo/">alltestdemo/</a>           </td><td align="right">06-Dec-2008 04:50  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="appserv/">appserv/</a>               </td><td align="right">04-Nov-2008 01:23  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="bjextreme/">bjextreme/</a>             </td><td align="right">03-Dec-2008 14:21  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="cgi-bin/">cgi-bin/</a>               </td><td align="right">04-Nov-2008 01:23  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="comment5.qq.com/">comment5.qq.com/</a>       </td><td align="right">05-Dec-2008 17:45  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="demo.wavemaker.com/">demo.wavemaker.com/</a>    </td><td align="right">24-Dec-2008 22:44  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="extreme-bj/">extreme-bj/</a>            </td><td align="right">22-Dec-2008 21:19  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="flexprj/">flexprj/</a>               </td><td align="right">10-Nov-2008 23:12  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="framestruct/">framestruct/</a>           </td><td align="right">16-Dec-2008 01:14  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="hello.swf">hello.swf</a>              </td><td align="right">26-Dec-2008 21:00  </td><td align="right">102 </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="i18nHTML-0.2.1/">i18nHTML-0.2.1/</a>        </td><td align="right">10-Mar-2009 23:55  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="iamsese.cn/">iamsese.cn/</a>            </td><td align="right">20-Nov-2008 00:32  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="index1.php">index1.php</a>             </td><td align="right">13-Jul-2006 17:07  </td><td align="right">4.4K</td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="myextreme/">myextreme/</a>             </td><td align="right">22-Oct-2008 11:17  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="myworkfolw/">myworkfolw/</a>            </td><td align="right">28-Nov-2008 02:34  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="phpMyAdmin/">phpMyAdmin/</a>            </td><td align="right">16-Jun-2007 01:27  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="phpinfo.php">phpinfo.php</a>            </td><td align="right">13-Jun-2005 10:19  </td><td align="right"> 18 </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="phptextforum/">phptextforum/</a>          </td><td align="right">09-Sep-2003 09:57  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="swfb.php">swfb.php</a>               </td><td align="right">26-Dec-2008 18:00  </td><td align="right">781 </td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="test.php">test.php</a>               </td><td align="right">01-Mar-2009 22:46  </td><td align="right">252 </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="webmail/">webmail/</a>               </td><td align="right">17-Jan-2005 17:31  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="www.fullswing.com.cn/">www.fullswing.com.cn/</a>  </td><td align="right">26-Dec-2008 09:58  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="www.hooyi-semi.com/">www.hooyi-semi.com/</a>    </td><td align="right">28-Nov-2008 10:39  </td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="www.thinkgos.com/">www.thinkgos.com/</a>      </td><td align="right">27-Dec-2008 04:25  </td><td align="right">  - </td></tr>
<tr><th colspan="5"><hr></th></tr>
</table>
<address>Apache/2.2.4 (Win32) PHP/5.2.3 Server at localhost Port 80</address>
</body></html>



相关推荐

Global site tag (gtag.js) - Google Analytics