添加数据是指在查询数据视图中,如果单击“添加“按钮,当前视图末尾添加一行数据,此时如果单击“确定“按钮,可以将用户添加的数据写入到数据库,同时更新当前行单元格中显示的数据,并隐藏临时表单域,演示效果如图1所示。
图1 添加数据
insertData ()函数功能与updateData ()函数的功能比较相似,但是它们操作数据的方法不同,一个是更新数据库中已有的数据,一个是向数据库中写入新的记录。但是它们都需要对用户输入的数据进行验证,并根据情况设计SQL字符串,因此它们的操作难度都是相同的。
//=================================== //把表格行内新添加的记录数据插入到数据表中 //参数 //paraobj { //row:插入行对象,DOM对象 //table:当前显示数据对应的数据表,字符串 //} //返回值:如果插入成功,则返回true,否则返回false var insertData = 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; var sql = "insert into [" + table + "] ("; //生成SQL字符串 var fieldname = []; var fieldvalue = []; 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{//开始处理值 var value = verifyData(value,{ //验证值 field: field, table: table }); if(!value){ //如果没有通过验证,则失败返回 return false; } } if( fieldobj[field][0] == "text" ){ //处理文本值,加引号 fieldname.push("["+field+"]"); fieldvalue.push("'" + value + "'"); } else if( fieldobj[field][0] == "num" ){ //处理数字的值,默认 fieldname.push("["+field+"]"); fieldvalue.push(value); } else if( fieldobj[field][0] == "time" ){ //处理时间值,加井号 fieldname.push("["+field+"]"); fieldvalue.push("#" + value + "#"); } } if( field == "edit"){ //编辑行 cell.innerHTML = "修改"; //该标签 cell.onclick = (function(cell){ //绑定行为 return function(){ //把行转换为表单域显示,并保留原表格行的值 var rowoldvalue = rowtoForm(paraobj); cell.innerHTML = ""; //清空“修改”二字 var tempedit = cell.onclick; //临时保存修改行为 cell.onclick = null; //清空单元格的事件 var btn = document.createElement("input"); //创建确定按钮 btn.type = "button"; btn.value = "确定"; cell.appendChild(btn); btn.onclick = function(){ //绑定行为 //把修改的数据保存到数据库 updateData(paraobj); //保持默认参数传递 cell.innerHTML = "修改"; //恢复标签 cell.onclick = tempedit; //恢复行为 } var btn = document.createElement("input"); //创建取消按钮 btn.type = "button"; btn.value = "取消"; cell.appendChild(btn); btn.onclick = function(){ //绑定行为 resettData({ //恢复行原来的值显示 row: row, table: table, rowoldvalue: rowoldvalue }); cell.innerHTML = "修改"; //恢复修改标签 cell.onclick = tempedit; //恢复行为 } } })(cell); } if( field == "del"){ //删除行 cell.innerHTML = "删除"; cell.onclick = function(){ delData(paraobj); //删除行 }; } } var namestr = fieldname.join(","); //把数组转换字符串 var valuestr = fieldvalue.join(","); sql += namestr + ") values (" + valuestr + ")"; //生成字符串 if(confirm("确定在数据表中插入记录?")){ //是否确定执行查询操作 execute(sql); //执行数据库更新操作 resettData({ //恢复行数据显示 row: row, table: table }); sql = "select top 1 * from "+ table+" order by id desc"; //查询写入数据库中的记录 var rs = requeryrs(sql); var id = rs("id"); //恢复该记录的id值 var adddate = rs("adddate"); //获取添加时间 for(var j=0;j<childnodes.length;j++){ //把id和添加时间显示在表格行中 cell = childnodes[j]; //单元格 field = cell.className; //类名 if( field == "id"){ //在第一个单元格显示id值 cell.innerHTML =String(id); } if( field == "adddate"){ //在更新时间列显示更新时间 var showvalue = formatData(adddate, { field: field, table: table }); if(!showvalue) showvalue = ""; cell.innerHTML = showvalue; } } closers(rs); return true; }else{ return false; } return true; }