不管是消费和支出,或者是日志都需要把用户在表单中输入的数据写入到数据库。为了方便操作,在writerecord.js文件中共定义了3个函数,说明如下:
- writerecord(table):写入收入和支出记录。
- writeblog(table):写入日志记录。
- writedetail(table, upperid, subtable):写入明细表。
其中明细表写入操作难度要复杂些,需要用户兼顾明细表关联的主表记录,避免写入的记录是一个孤立的数据,一般在录入主要记录时,会包含很多条附属的明细记录,演示效果如图23.22所示。明细表录入的详细代码如下。
图1 录入数据
//=================================== //写入明细表 function writedetail(table, upperid, subtable){ //初始化参数值 var table = table || "out"; //获取表单对象 var detail = document.getElementById("detail"); var subclass = document.getElementsByClassName("subclass"); var subremark= document.getElementsByClassName("subremark"); if( table != "blog"){ var price= document.getElementById("price"); var subprice= document.getElementsByClassName("subprice"); //获取金额和说明文本框 var sumprice = 0; for(var i=0;i<subprice.length;i++){ //合计分类金额 sumprice += parseFloat(subprice[i].value); } if(parseFloat(price.value) != sumprice && subprice.length>1 ){ if(confirm("总金额与各项消费金额之和不相等,是否在数据库中改写总金额为 " + sumprice + "?")){ var sql = "update "+ table +" set price = " + sumprice + " where id = " + upperid; execute(sql); } } } //遍历明细表单集合,录入数据 for(var i=0; i<subclass.length; i++){ subclassvalue = subclass[i].value; subremarkvalue = subremark[i].value; if( table != "blog"){ subpricevalue = subprice[i].value; if(!isNaN(parseFloat(subpricevalue))){ var sql = "insert into "+ subtable +"(price,class,upperid, remark) values(" + parseFloat(sub pricevalue ) + "," + subclassvalue + "," + upperid + ",'" + subremarkvalue + "')"; execute(sql); //核实是否真正和准确写入 sql = "select top 1 * from "+ subtable +" order by id desc"; var rs = requeryrs(sql); if(parseFloat(subpricevalue) != parseFloat(rs("price"))){ alert("输入存在问题:\n请核查一下"+ subtable +"数据表,看是否真正写入数据表"); closers(rs); break; } closers(rs); } } else{ var sql = "insert into "+ subtable +"(class,upperid, remark) values(" + subclassvalue + "," + upperid + ",'" + subremarkvalue + "')"; execute(sql); //核实是否真正和准确写入 sql = "select top 1 * from "+ subtable +" order by id desc"; var rs = requeryrs(sql); if(parseFloat(subpricevalue) != parseFloat(rs("price"))){ alert("输入存在问题:\n请核查一下"+ subtable +"数据表,看是否真正写入数据表"); closers(rs); break; } closers(rs); } } }
关于支出和收入、日志数据写入函数比较简单,这里就不再进行详细说明,读者可以参阅本书光盘示例。