就是客户端操作access,没什么意义

解决方案 »

  1.   

    另一个例子<html>
    <head>
    <title>Database Administrator</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="mycss.css" type="text/css">
    <script language="javascript">
    function GetFileExt(filename){
    var temppos=filename.lastIndexOf(".");
    var returnvalue=""; if (temppos>0){
    returnvalue=filename.substr(temppos);
    } return returnvalue.toUpperCase();
    }
    //--------------------------------------------
    //--清空文件选择列表
    //--param: el=<select> object
    //--------------------------------------------
    function deleteoptions(el){
    var templen=el.options.length;
    for(var i=templen;i>=0;i--){
    el.remove(i);
    }
    }
    //--------------------------------------------
    //--生成数据表选择列表,事先清空列表
    //--param: el=<select> object
    //--------------------------------------------
    function GetSchema(filename,el){
    var datastr="";
    var tname;
    var ttype;
    var strdsn;
    var objrs; var objdbConn = new ActiveXObject("ADODB.Connection");
    if (GetFileExt(filename) == ".MDB"){
    strdsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="+filename;
    }else{
    strdsn = filename;
    } //首先清空文件列表
    deleteoptions(el);
    try{
    objdbConn.Open(strdsn);
    objrs = objdbConn.OpenSchema(20);
    }
    catch(e){
    alert("打开数据库错误!\r\n"+e.description);
    return;
    }
    var fdCount = objrs.Fields.Count - 1;
    if (!objrs.EOF){
    while (!objrs.EOF){
    tname=objrs.Fields("TABLE_NAME").Value;
    ttype=objrs.Fields("TABLE_TYPE").Value;
    if ((ttype=="TABLE") || (ttype=="VIEW")){
    myoption=new Option("["+ttype+"]"+tname,tname);
    el.options[el.options.length]=myoption;
    }
    objrs.moveNext();
    }

    }
       objrs.Close();// 关闭记录集合 return true;
    objdbConn.Close();    // 关闭数据库链接
    }
    //未完
      

  2.   

    function GetDataFromDB(filename,tablename){
    var datastr="";
    var strdsn;
    var objrs;
    var objdbConn = new ActiveXObject("ADODB.Connection");
    if (tablename==""){
    return;
    } if (GetFileExt(filename) == ".MDB"){
    strdsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="+filename;
    }else{
    strdsn = filename;
    }
    try{
    objdbConn.Open(strdsn);
    objrs = objdbConn.Execute("SELECT * FROM "+tablename);
    }
    catch(e){
    alert("打开数据库错误!\r\n"+e.description);
    return;
    }
    var fdCount = objrs.Fields.Count - 1; datastr=datastr+"数据库:["+filename.replace(/\\/gi,"/")+"].["+tablename+"]<BR><table border=1><tr>"+"\r\n";   
    // 显示数据库的字段名称
    for (var i=0; i <= fdCount; i++)
      datastr=datastr+"<td><b>" + objrs.Fields(i).Name + "</b></td>"+"\r\n";
      datastr=datastr+"</tr>"; if (!objrs.EOF){
    // 显示数据库内容
    var rnum=0;
    while (!objrs.EOF){
    datastr=datastr+"<tr>";     
      // 显示每笔记录的字段
    for (i=0; i <= fdCount; i++)
    datastr=datastr+"<td>" + objrs.Fields(i).Value + "</td>"+"\r\n";
    datastr=datastr+"</tr>";
    objrs.moveNext();  // 移到下一笔记录
    rnum++;
    }
    datastr=datastr+"</table>"+"\r\n"; 
    datastr=datastr+"数据库共有"+rnum+"条记录!<br>";
    }else{ 
    datastr=datastr+"</table>"+"\r\n"; 
       datastr=datastr+"数据库内没有记录!<br>";
    }   objrs.Close();// 关闭记录集合 return datastr; objdbConn.Close();    // 关闭数据库链接
    }
    function GetXMLFromDB(filename,tablename){
    var datastr="";
    var strdsn;
    var objrs;
    var objdbConn = new ActiveXObject("ADODB.Connection");
    if (tablename==""){
    return;
    } if (GetFileExt(filename) == ".MDB"){
    strdsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="+filename;
    }else{
    strdsn = filename;
    }
    try{
    objdbConn.Open(strdsn);
    objrs = objdbConn.Execute("SELECT * FROM "+tablename);
    }
    catch(e){
    alert("打开数据库错误!\r\n"+e.description);
    return;
    }
    var fdCount = objrs.Fields.Count - 1; datastr=datastr+"<?xml version='1.0' encoding='gb2312'?><DATA><title> 数据库:["+filename.replace(/\\/gi,"/")+"].["+tablename+"]</title>"+"\r\n";   
    // 显示数据库的字段名称
    datastr=datastr+"<fields><count>"+(fdCount+1)+"</count>"+"\r\n";
    for (var i=0; i <= fdCount; i++)
      datastr=datastr+"<field"+i+">" + objrs.Fields(i).Name + "</field"+i+">"+"\r\n";
      datastr=datastr+"</fields>"+"\r\n"; if (!objrs.EOF){
    // 显示数据库内容
      datastr=datastr+"<records>"+"\r\n";
    var rnum=0;
    while (!objrs.EOF){
    datastr=datastr+"<record>";     
      // 显示每笔记录的字段
    for (i=0; i <= fdCount; i++)
    datastr=datastr+"<"+objrs.Fields(i).Name+">" + objrs.Fields(i).Value + "</"+objrs.Fields(i).Name+">"+"\r\n";
    datastr=datastr+"</record>"+"\r\n";
    objrs.moveNext();  // 移到下一笔记录
    rnum++;
    }
    datastr=datastr+"</records>"+"\r\n";
       datastr=datastr+"<message>数据库共有"+rnum+"条记录!</message>"+"\r\n";
    }else{ 
       datastr=datastr+"<message>数据库内没有记录!</message>"+"\r\n";
    }
    datastr=datastr+"</DATA>";    objrs.Close();// 关闭记录集合 return datastr; objdbConn.Close();    // 关闭数据库链接
    }
      

  3.   

    //--------------------------------------------
    //--利用本地文件组件进行创建文件夹,自动创建上级所有文件夹
    //--param: thepath = string (目标路径)
    //--------------------------------------------
    function CreateFolder(thepath){
    var objFSO = new ActiveXObject("Scripting.FileSystemObject");
    var strFolder=thepath.replace("\\","/");
    try{
    for (var i=0;i<strFolder.length;i++){
      if (strFolder.substr(i,1)=="/"){
    var temppath=strFolder.substr(0,i+1);
    //alert(temppath);
    if (objFSO.FolderExists(temppath)){
    ;
    }else{
    objFSO.CreateFolder(temppath);
    }
      }
    }
    CreateFolder=true
    }
    catch(Exception){
    CreateFolder=false

    }
    }//--------------------------------------------
    //--利用本地文件组件进行创建文件
    //--param: filetext,folderTo,fileTo = string
    //-- 待写入的文本,目标路径,目标文件名称
    //--------------------------------------------
    function CreateFile(filetext,folderTo,fileTo){
    var objFSO = new ActiveXObject("Scripting.FileSystemObject");
    var strPathFile = folderTo+fileTo; if (objFSO.FolderExists(folderTo)){
    ;
    }else{
    CreateFolder(folderTo);
    }

    var objStream = objFSO.CreateTextFile(strPathFile, true);
    objStream.write(filetext);
    objStream.Close(); 
    }function showfile(el,openasxml){
    var dbfilename,tablename;
    var tempfile,body; dbfilename=dbfile.value; if ((dbfilename=="") || (el.options.count<1)){
    return;
    }
    tablename=el.options[el.selectedIndex].value; if (openasxml){
    tempfile="~temp.xml";
    body=GetXMLFromDB(dbfilename,tablename);
    }else{
    tempfile="~temp.html";
    body=GetDataFromDB(dbfilename,tablename);
    }// alert(temppath+tempfile);
    //return;// content.document.open();
    // mycontent.document.location=tempfile; mycontent.value=body; downloadbtn.disabled=false;
    downloadbtn.style.cursor="hand";
    genfile.value=tempfile;
    }
    function downloadfile(){
    var temppath=document.location.pathname;
    temppath=temppath.substr(1,temppath.lastIndexOf("\\")); CreateFile(mycontent.value,temppath,genfile.value);
    window.open(genfile.value);
    }
    </script>
    </head>
    <body>
    <input type=file id="dbfile" name="dbfile" class="inputbox" style="width:100%">
    <input type=button id="showdb" name="showdb" value="打开" onclick="javascript:GetSchema(dbfile.value,tablelist)">
    <select id="tablelist" name="tablelist"></select>
    <input type=button id="showdb" name="showdb" value="按HTML显示" onclick="javascript:showfile(tablelist,false)">
    <input type=button id="showdb" name="showdb" value="按XML显示" onclick="javascript:showfile(tablelist,true)">
    <input type="hidden" id="genfile" name="genfile" value=""><button id="downloadbtn" onclick="javascript:downloadfile()" style="cursor:default" disabled="true">预览</button>
    <select id="driverlist" name="driverlist" onchange="javascript:mycontent.value=this.options[this.selectedIndex].value">
    <option value="">选择MDB文件的位置</option>
    <option value="DSN=XXX">DSN方式</option>
    <option value="DRIVER=SQL Server;SERVER=XTNOTE;User ID=sa;PASSWORD=;DATABASE=XXXX">SQL Server方式</option>
    </select>
    <P>
    <!--
    <iframe style="width:100%;height:300" src="" id="mycontent" name="mycontent"></iframe>
    -->
    <textarea  style="width:100%;height:300" id="mycontent" name="mycontent" class="textarea01"></textarea>
    </body>
    </html>
      

  4.   

    和服务器端不都是一样,建表和库用ADOX
      

  5.   

    这两个是比较简单实用的程序,第一个程序演示了如何用javascript操作数据库
    前段时间正好有个项目需要把程序装入U盘的小数据库程序,pws和IIS是指望不上了,没想到javascript也可以像asp一样用.
    第二个程序是一个实用的程序,在服务器上操作的时候想要查看access文件,没有装office
    或者在某台客户的win98上没有装sql,如果仅仅是想查询一下数据库中某个表中的数据,一个网页就可以解决问题.
    也许你早就了解了ADO,早就会写HTML,也能用access,但聪明的人定能够从中学到新的东西.
      

  6.   

    好东东,找了好久!
    这东西当然有意思,不用装iis和pws就可以将数据保存到数据库呀!
    我找了好久的,之前是问别人用纯VBScript操作数据库的。
    谢谢楼主。
      

  7.   

    意思是说。只要把mdb和html传上服务器。即使是只支持html的服务器也能用数据库了?
      

  8.   

    可能对一些特殊需要你可以用这种方式来解决。但试问,要是忽然你手头没装OFFICE,而却要查询数据库,你是去找这个软件呢,还是找一个其他的方式把他编写出来呢?这个东东既然可以做自然有它存在的道理,但真正要做数据库应用,还是放弃这种方面的尝试吧。
      

  9.   

    首先要感谢鼓励我的朋友们,也要感谢泼凉水的朋友,至少这表示你们关注了!
    最新的探索心得其实 wind0209(风のFeeling) 说的很有道理,存在必然有其存在的道理,关键看你怎么样去用这种技术。XML作为数据的传输和存储甚至是以文本的方式来进行的,你能因此就低估其价值吗?如果你是担心你的程序老是弹出安全警告窗口,很简单,把扩展名由HTM改为HTA就行了。
    (HTA的意思是告诉你的系统这是一个采用HTML制作的应用程序)以下是我探索的一些方向
    用JS.Encode可以对JS代码加密
    用encode函数可以对所有的HTML代码进行编码
    用电子书chm格式可以对HTML涉及的文件进行封装
    用动态生成数据库的方法可以进行程序的数据库自动化安装
    常用的数据表现组件采用HTC进行对象化封装
    使用HTML编写一个C#.NET数据库程序自动生成器
    使用HTML编写一个具有数据库支持的桌面HTML背景(可以接收网络电视、电台、MP3)
      

  10.   

    这个很简单吧,用access做个窗体导出成html页面就可以了的啊:)
      

  11.   

    不错
       原来JS照样可以操作数据库啊。。
       想向楼主请教一个问题,JS能不能在不知在不支持ASP等编程语言的服务器上。
       客户端能不能提交信息到服务器,再把表单信息添加到服务器上的数据库呢?
       还用就是想向楼主请教下,在用JS使用ActiveXObject控件的时候总弹出安全
    对话框,请问有没有 什么方法能在不通过认可的情况下进行操作呢?
      

  12.   

    呵呵 使用 ADO 而已 用 js, vbs 其实都是一样的啊
      

  13.   

    楼主的探索精神值得肯定。其实,在客户端操作ACCESS或者WORD、EXCEL都可以做到,因为只要用WSH技术就可以了,功能非常强大。楼主的例子只是一个比较浅显的应用。WSH嵌入HTML里,可以做出类似于应用程序般的惊人效果。
      

  14.   

    收藏了再说,但我对不支持asp的服务器用数据库技术表示怀疑,不可以吧,除非人家把MDB 文件下载下来大家讨论讨论啊,呵呵
      

  15.   

    如果真的需要操作数据库的话,还不如用别的,
    VB,VC,等等。
    何必用HTML,多伤神客户端限制太多!
      

  16.   

    不懂access,弄个操作MYSQL的来看看刚才写漏重发
      

  17.   

    行行出状元,我觉得既然javascript应用这么广泛,一定有它存在的道理,楼主另辟新路,而且深入钻研,这种精神值得我们去学习.支持楼主一个.希望楼主能继续.