更新数据

课后整理 2021-2-25

更新数据是指在查询数据视图中,如果修改数据完毕,当单击“确定“按钮,可以将用户在临时表单中修改的数据写入到数据库,同时更新当前行单元格中显示的数据,并隐藏临时表单域,演示效果如图1所示。 updateData()函数的功能就是当用户单击查询数据视图中的“确定“按钮后,能够自动获取当前行的每个表单域中的数据,并对数据进行验证,验证合格之后,把这些数据写入到数据库。

图1 更新数据

然后,删除所有临时表单域,并使用修改后的数据填充每个单元格显示出来。本函数的难点是如何验证数据类型,并准确把数据写入到数据库中,如图1所示。详细代码如下。

//===================================
//把表格行内已修改的数据写入到数据表中
//参数
//paraobj {
    //row:当前行对象,DOM对象
    //table:当前显示数据对应的数据表,字符串
//}
//返回值:如果成功,则返回true,否则返回false
var updateData = 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;        
    }
    var sql = "update [" + table + "] set ";		//生成SQL字符串
    var childnodes = row.childNodes; 			//获取行内单元格
    for(var j=0;j<childnodes.length;j++){		//遍历行内单元格
        var cell = childnodes[j];
        var field = cell.className;
        if(!field){ 						//如果不存在类名,则跳过
            continue;
        }
        if(fieldobj[field][2] != "no"){			//处理包含表单域的可编辑单元格
            var value = cell.firstChild.value;
             if(!value){
                alert("请输入"+ fieldobj[field][1] +"列的值!");
                return false; 
             }else{
                value = verifyData(value,{ 	//验证数据
                    field:    field,
                    table:    table
                });
             }             
            if( fieldobj[field][0] == "text" ){
                sql += "[" +field + "]='" + value + "', ";
            }else if( fieldobj[field][0] == "num" ){
                sql +="[" +field + "]=" + value + ", ";
            }    
        }
    }
    var date = new Date();//获取当前更新时间
    var updatetime = date.getFullYear() +"-" + (date.getMonth()+1) +"-" + date.getDate() +" " + 
    date.getHours()+":" + date.getMinutes() +":" +date.getSeconds();
    sql += "[update]= #" + updatetime + "# ";		//设计更新字符串
    sql += " where id =" + parseInt(id);
    if(confirm("确定要修改当前行记录?")){	//是否确定执行查询操作
        paraobj.rowoldvalue = null; 			//清除参数对象中的rowoldvalue值
        if(updatetime)            			//在参数对象中添加updatetime属性和值
            paraobj.updatetime = updatetime;
        resettData(paraobj);
        execute(sql);             					//执行数据库更新操作
    }
}