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