用javascript连接access数据库的方法
发布时间:2024-01-15 11:11:51
刚看到一个朋友写的用javascript连接excel数据库的程序,想把它改成access数据库的,就找到了这两篇文章
------------------------------------------
这几天费了挺大力气在网上查找javascript连接access数据库的方法,
经过整理总结,终于写出一段能够有效执行的代码。
但是这段代码在本地可以正常运行,一旦放到免费个人空间上就没法执
行了,主要原因就是操作权限不够,由于只支持静态页面的免费空间多数都
作了非常严格的限制,所以无论是用mdb的方式,还是读写纯文本文件的方式
都没办法通过,而由页面报出js错误。国外的一些免费空间,直接就禁止mdb
这样扩展名的文件上传。
虽然没希望在纯静态页面的免费空间上作自己的计数器或是留言版,但是
这段程序也许还是对一些朋友有用处,写出来供各位研究一下。
文件构成:
Access数据库名为 MyData.Mdb, 里面建了一个名为count的表,表由两个
字段组成: ID和COUNT,表里有一条数据: ('count','100')。
文本文件名为 count.txt,里面随便写入一个数字。
静态页面名为Cnt.htm。
以上3个文件都放在同一目录下。
由于采用Access数据库,而它采用非标准SQL语法,所以要注意在表名
和字段名上需要加方括号: []
下面是页面里的代码:
其中getCountFromDB方法是对Access数据库进行操作,getCountFromTxt
方法是对txt纯文本进行操作,这两个方法都在本地执行通过。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<SCRIPT LANGUAGE="JavaScript">
<!--
function getCountFromDB() {
//以当前页面文件为基础,找到文件所在的绝对路径。
var filePath = location.href.substring(0, location.href.indexOf("Cnt.htm"));
var path = filePath + "MyData.mdb";
//去掉字符串中最前面的"files://"这8个字符。
path = path.substring(8);
var updateCnt = 0;
//生成查询和更新用的sql语句。
var sqlSelCnt = "Select COUNT FROM [COUNT] Where ID = 'count'";
var sqlUpdCnt = "Update [COUNT] SET [COUNT] = '";
//建立连接,并生成相关字符串 www.knowsky.com。
var con = new ActiveXObject("ADODB.Connection");
con.Provider = "Microsoft.Jet.OLEDB.4.0";
con.ConnectionString = "Data Source=" + path;
con.open;
var rs = new ActiveXObject("ADODB.Recordset");
rs.open(sqlSelCnt, con);
while (!rs.eof) {
var cnt = rs.Fields("COUNT");
document.write(cnt);
//将取得结果加1后更新数据库。
updateCnt = cnt * 1 + 1;
rs.moveNext;
}
rs.close();
rs = null;
sqlUpdCnt = sqlUpdCnt + updateCnt + "'";
con.execute(sqlUpdCnt);
con.close();
con = null;
}
function getCountFromTxt() {
var filePath = location.href.substring(0, location.href.indexOf("Cnt.htm"));
var path = filePath + "count.txt";
path = path.substring(8);
var nextCnt = 0;
var fso, f1, ts, s;
//以只读方式打开文本文件。
var ForReading = 1;
//以读写方式打开文本文件。
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.GetFile(path);
ts = f1.OpenAsTextStream(ForReading, true);
s = ts.ReadLine();
nextCnt = eval(s) + 1;
document.write("now count is :" + s);
ts.Close();
ts = f1.OpenAsTextStream(ForWriting, true);
ts.WriteLine(nextCnt);
ts.close();
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
getCountFromTxt();
//-->
</SCRIPT>
</BODY>
</HTML>
后记:虽然在只支持静态页面的免费空间不可用,但是我想一些支持
Asp的免费空间应该能用,当然我没有具体试过,只是凭自己想象。
并且用这种方法来读写数据库,只适合做计数器和留言版这样的不需
要保密性的工作,毕竟代码全是用javascript写成的,谁都可以看到,
然后就可以得到路径把db文件下载下来进行分析,所以没办法用它来
保存一些不想让别人知道的东西。
就像我一个同事说的,用javascript连接数据库进行操作,简直就是
霸王硬上弓,呵呵,的确如此,既然不能用在免费空间上作自己的计
数器,那这段代码就只能用来玩玩,自己找找良好感觉了。
-----------------------------
好多网上的朋友都在解决某些问题的时候,都感觉到很困惑,而很多人都觉得用javascript连接数据库很是不理解,甚至于就断定javascript只能被客户端所执行,不能连接数据库,而且我查找了一下,CSDN上介绍的太笼统,初学者根本就看不懂,其他的论坛我没有搜索。介于此种情况,我决定好好看看MSDN ,通过看了VC++的连接数据库的例子,总结出JAVASCRIPT连接数据库的方法,现公布给大家
<script language=javascript>
// ^_^
//
//(c) in 2002-2003 by Alex(Chinese:蒋健华)
//http://www.finder.net.cn
//C Email: jiangjh@finder.net.cn
//F Email: jjh_115@eyou.com
</script>
<script language=javascript>
function replace(v)
{
//容错问题,请读者自行进行判断。
//定义SQL语句
var sql = "select * from Dictionary where MainID='" + v + "'" ;
//新建数据库连接对象和数据集存取对象
var ConnDB = new ActiveXObject("adodb.connection");
var rs = new ActiveXObject("ADODB.Recordset");
//这里填入要连接的DSN
ConnDB.ConnectionString="DSN=***;uid=***;pwd=***";
ConnDB.open
rs.open(sql,ConnDB,1,1);
if (rs.RecordCount>0){
if (v==parseInt(rs("MainID"))){
//字符串连接
document.all('txt').value = v + rs("MainValue");
var sql=null;
rs.close
ConnDB.close
return;
} else {
var sql=null;
alert("没有此代号!");
txt.select();
txt.focus();
rs.close
ConnDB.close
}
}
</script>
<input type=text id=txt name=txt onblur="replace(this.value)">
猜你喜欢
- 代码如下:td=date() '此次为设置当前日期,主要是为了调试方便,实际应用中可以使用当天日期.. str=
- 推荐第四种方案1通过MyBatis配置文件创建读写分离两个DataSource,每个SqlSessionFactoryBean对象的mapp
- 静态数据类型静态数据类型是指不可以对该数据类型进行修改,即只读的数据类型。迄今为止学过的静态数据类型有字符串,元组。在使用[]操作符对字符串
- 本文实例为大家分享了Python实现滑雪小游戏的具体代码,供大家参考,具体内容如下源码分享:import sysimport cfgimpo
- 为什么说刷新页面vuex的数据会丢失刷新页面vuex的数据会丢失属于正常现象,因为JS的数据都是保存在浏览器的堆栈内存里面的,刷新浏览器页面
- 本文实例讲述了python计算时间差的方法。分享给大家供大家参考。具体分析如下:1、问题:给定你两个日期,如何计算这两个日期之间间隔几天,几
- 是不是很烦每次注册网站或填写相关资料时都要重来一遍?其实会有很多自动填写工具能代劳。比如使用 Mac, 在 Safari 的表单中,它可以足
- PHPStudy hosts文件可能不存在或被阻止打开,同步hosts失败在使用PHPStudy建站包时,有时会遇到同步hosts失败的问题
- 在Pandas中读取CSV数据时,会默认将第一列设为索引列index。但有时候我们并不需要索引,或者希望指定自己的索引列。这时就需要在导入C
- 在开发一些需要网络通信的应用中,经常会用到各种网络协议进行通信,博主在开发实验室的机器人的时候就遇到了需要把机器人上采集到的图片传回服务器进
- 问题最近在做项目的时候, dialog组件回调close里面 一般我都会加个resetFields 重置初始值和校验其他地方都没问题, 在t
- 1. 前言分形几何是几何数学中的一个分支,也称大自然几何学,由著名数学家本华曼德勃罗( 法语:BenoitB.Mandelbrot)在 19
- 文末附完整源代码实现过程...想实现这样一个功能,然后pyqt5中又没有现成的组件可以使用,于是就想着只能通过绘图的方式来实现。说到绘图的话
- 前言调用EXPLAIN可以获取关于查询执行计划的信息,以及如何解释输出。EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法,但该动
- 连接mysql常用工具mysql作为数据库服务器来运行,任何满足mysql通信规范的软件都可以作为客户端来连接服务器。常用的客户端:navi
- 前言最近在学习微信小程序,在学习的过程中,有很多好玩的 API,经常点外卖的同学可能在小程序中遇到过,比如:某团、某了么都是有显示当前用户位
- 本文实例讲述了MySQL定时备份数据库操作。分享给大家供大家参考,具体如下:1. 查看mysqldumproot@laowang:/# wh
- 一、方差分析1.单因素方差分析通过箱线图可以人肉看出10组的订单量看起来差不多,为了更科学比较10组的订单量有无显著差异,我们可以利用方差分
- 前言近几日迫于被辅导员三番五次的提醒每日一报打卡,就想着去写个脚本挂在服务器上定时执行。经过我不懈的努力,最终选择了seleniumsele
- PyTorch之TensorDatasetTensorDataset 可以用来对 tensor 进行打包,就好像 pyt