使用 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.aspadoCmd.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 读取和写入访问数据库的主要内容,如果未能解决你的问题,请参考以下文章