使用 Javascript 读取和写入访问数据库

Posted

技术标签:

【中文标题】使用 Javascript 读取和写入访问数据库【英文标题】:Read and write to an access database using Javascript 【发布时间】:2012-04-04 08:15:02 【问题描述】:

首先我想提一下,我知道在与数据库的 Web 交互中应该 出于安全原因,始终使用服务器端语言以及 javascript as is 不提供与 windows 文件系统的兼容性。

这说明我正面临着一种困境,我正在尝试创造性地思考。 我不允许对服务器端脚本和 SQL 进行任何访问。

我需要为 Intranet 创建一个基于客户端的应用程序,该应用程序能够随着时间的推移存储数据。

到目前为止,我已经找到了 2 个解决方案,但没有一个有足够的文档供我正确使用。

一个是一个名为 ACCESSdb 的 javascript 库,可以在这里找到:ACCESSdb 不幸的是,我无法理解如何使用它来写入或读取数据库中的数据......

另一个是那 3 段代码:

添加记录:

function AddRecord() 
var adoConn = new ActiveXObject("ADODB.Connection");
var adoRS = new ActiveXObject("ADODB.Recordset");

adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='/\dbName.mdb'");
adoRS.Open("Select * From tblName", adoConn, 1, 3);

adoRS.AddNew;
adoRS.Fields("FieldName").value = "Quentin";
adoRS.Update;

adoRS.Close();
adoConn.Close();
  

删除记录:

function DeleteRecord() 
var adoConn = new ActiveXObject("ADODB.Connection");
var adoRS = new ActiveXObject("ADODB.Recordset");

adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\dbName.mdb'");
adoRS.Open("Select * From tblName Where FieldName = 'Quentin'", adoConn, 1, 3);
adoRS.Delete;
adoRS.Delete;

adoRS.Close();
adoConn.Close();
  

编辑记录:

function EditRecord() 
var adoConn = new ActiveXObject("ADODB.Connection");
var adoRS = new ActiveXObject("ADODB.Recordset");

adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\dbName.mdb'");
adoRS.Open("Select * From tblName Where FieldName = 'Quentin'", adoConn, 1, 3);

adoRS.Edit;
adoRS.Fields("FieldName").value = "New Name";
adoRS.Update;

adoRS.Close();
adoConn.Close();
  

其中只有 添加新记录出于某种原因对我有用... 我还发现要读取第一行中任何单元格的值,我所要做的就是写:

alert(adoRS(cellNum));  

但是如何获取后面行中单元格的值?可以说(第 3 行,第 5 单元格)。

感谢您阅读本文!我会非常感谢你的帮助!

杰克

【问题讨论】:

我之前没有使用 ActiveXObject 创建的 ADODB,但您可以尝试将 adoRS.Delete 更改为 adoRS.Delete()adoRS.Edit 更改为 adoRS.Edit()adoRS.Update 更改为 adoRS.Update()。您需要使用 ms-access db(它位于网络共享或其他地方)? 谢谢,我会尝试你的建议。是的,它将位于网络驱动器上。你还知道如何从比第一个低的行中提取值吗? 你试过adoRS.moveNext()吗? msdn.microsoft.com/en-us/library/windows/desktop/… 感谢它确实让我进入了下一个记录。 :) 您是否知道一种无需循环 adoRS.moveNext() 50 次即可直接进入第 50 条记录的方法?比如说 adoRS.moveNext(50) 或类似的东西...... 我也刚刚尝试了 adoRS.Delte() 并且效果很好。非常感谢普鲁斯。之前我什至懒得看 MSDN 站点,因为我认为那里的所有方法都只适用于微软语言(C、C++、C#、VB ...)我不认为 javascript 也会被支持。期待更复杂的事情。 【参考方案1】:

首先,确保“/\”和“\”(在连接字符串中)只是 SO 中的一个错字。

其次,这里是删除命令的一个版本:

function DeleteRecord() 
var adoConn = new ActiveXObject("ADODB.Connection");
var adoCmd = new ActiveXObject("ADODB.Command");

adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\dbName.mdb'");
adoCmd.ActiveConnection = adoConn;
adoCmd.CommandText = "Delete * From tblName Where FieldName = 'Quentin'";
adoCmd.Execute();

adoConn.Close();

并且,编辑命令(不循环 -> 更新所有 [匹配] 记录):

function EditRecord() 
var adoConn = new ActiveXObject("ADODB.Connection");
var adoCmd = new ActiveXObject("ADODB.Command");

adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\dbName.mdb'");
adoCmd.ActiveConnection = adoConn;
adoCmd.CommandText = "Update tblName Set FieldName = 'New Value' Where FieldName = 'Quentin'";
adoCmd.Execute();

adoConn.Close();
  

请注意,我没有测试过这个(现在没有访问权限),所以可能有一些 语法错误...

希望它有效并有所帮助。

【讨论】:

谢谢。我的一个问题是 ADODB.Command 和 ADODB.Recordset 之间有什么区别?什么时候会比另一个更好地使用一个? 我认为这些链接可能有助于查看差异:w3schools.com/ADO/ado_ref_command.asp 和 w3schools.com/ADO/ado_ref_recordset.asp adoCmd.CommandText("Delete * From tblName Where FieldName = 'Quentin'"); 对我不起作用,但 adoCmd.CommandText="Delete * From tblName Where FieldName = 'Quentin'"; 确实起作用,仅供参考 @MartinOLeary,感谢您的指出!我做了更正。【参考方案2】:
    function loadDB() 

    var connection = new ActiveXObject("ADODB.Connection");
    var connectionstring = "Data Source=.;Initial Catalog=EmpDetail;Persist Security Info=True;User ID=sa;Password=Micr0s0ft;Provider=SQLOLEDB";
    connection.Open(connectionstring);

    var rs = new ActiveXObject("ADODB.Recordset");
    rs.Open("select * from emp", connection);
    rs.MoveFirst();

    var span = document.createElement("span");

    span.style.color = "Blue";

    span.innerText = "  ID " + "  Name " + "   Salary";

    document.body.appendChild(span);

    while (!rs.eof)

        var span = document.createElement("span");
        span.style.color = "green";

        span.innerText = "\n " + rs.fields(0) + " |  " + rs.fields(1) + " |  " + rs.fields(2);

        document.body.appendChild(span);

        rs.MoveNext();
    
    rs.close();
    connection.close();

【讨论】:

以上是关于使用 Javascript 读取和写入访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

jquery.cookie() 方法的使用(读取写入删除)

javascript中数据属性和访问器属性

Matlab并行写入和读取

JavaScript高级程序设计---学习笔记

如何在 html 网站上使用 javascript 读取和写入另一个文件?

通过浏览器使用 javascript/jQuery 读取和写入 ID3 标签到本地文件?