更新数据是指在查询数据视图中,如果修改数据完毕,当单击“确定“按钮,可以将用户在临时表单中修改的数据写入到数据库,同时更新当前行单元格中显示的数据,并隐藏临时表单域,演示效果如图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); //执行数据库更新操作 } }