删除数据

课后整理 2021-2-25

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