删除数据是指在查询数据视图中,如果单击“删除”按钮,可以删除当前数据行显示的数据,同时在数据库中删除该条记录,演示效果如图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; }