不管是消费和支出,或者是日志都需要把用户在表单中输入的数据写入到数据库。为了方便操作,在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);
}
}
}
关于支出和收入、日志数据写入函数比较简单,这里就不再进行详细说明,读者可以参阅本书光盘示例。