删除数据是指在查询数据视图中,如果单击“删除”按钮,可以删除当前数据行显示的数据,同时在数据库中删除该条记录,演示效果如图1所示。

图1 删除数据
delData()函数功能实现不是很难,只要知道要删除的记录编号和对应的数据表即可,当然在执行操作时应该谨慎,避免用户不小心误删了数据,同时在删除数据库中的记录后,也应该在当前表格中删除当前数据行。
//===================================
//在表格中删除指定行,并删除数据表中对应记录
//参数
//paraobj {
//row:当前行对象,DOM对象
//table:当前显示数据对应的数据表,字符串
//}
//返回值:如果成功,则返回true,否则返回false
var delData = function(paraobj){
var _paraobj = paraobj; //保存参数
var paraobj = {};
for(var name in _paraobj){
paraobj[name] = _paraobj[name];
}
if(!paraobj.row){ //处理参数值
alert("没有指明当前行!");
return false;
}else
var row = paraobj.row;
if(!paraobj.table){
alert("没有指明当前表格显示数据对应的数据表!");
return false;
}else
var table = paraobj.table;
if(row.firstChild.firstChild) //获取行的第一个单元格的编号值
var id = parseInt(row.firstChild.firstChild.data);
else{
alert("当前行没有编号,无法进行删除操作!");
return false;
}
if(tableobj[table][4]!="no"){ //过滤是否检索被引用的数据表
var sql = "select * from " + tableobj[table][4] + " where upperid = "+ id; //定义查询字符串
var rs = requeryrs(sql); //查询数据
if(!rs.eof){
alert("当前记录已被引用!\n引用明细表:" + tableobj[table][4] + " \n被引用
记录编号:" + id + "\n只有先删除明细表中引用的记录之后,才能够删除当前记录!");
closers(rs); //关闭记录集
return false;
}
closers(rs); //关闭记录集
}
if(tableobj[table][9]!="no"){ //如果被多个表引用,则需要逐一进行复查
var array = tableobj[table][9]; //定义查询字符串
if(!(typeof array == "object") && !(array.constructor == Array)){
alert("映射值不是数组!");
return false;
}
for(var i=0;i<array.length; i++){
var sql = "select * from " + array[i] + " where class = "+ id;
var rs = requeryrs(sql); //查询数据
if(!rs.eof){
alert("当前记录已被引用!\n引用分类表:" + array[i] + " \n被引用记录
编号:" + id + "\n只有先删除详细表中引用的记录之后,才能够删除当前记录!");
closers(rs); //关闭记录集
return false;
}
closers(rs); //关闭记录集
}
}
if(confirm("慎重操作:\n删除数据将无法恢复,确定要删除编号为 "+ id +" 的记录?")){
var sql = "delete * from [" + table + "] where id= " + id; //定义字符串
execute(sql); //在数据库中执行删除操作
row.parentNode.removeChild(row); //移出当前行
return true;
}else
return false;
}