数据录入

课后整理 2021-2-25

不管是消费和支出,或者是日志都需要把用户在表单中输入的数据写入到数据库。为了方便操作,在writerecord.js文件中共定义了3个函数,说明如下:

其中明细表写入操作难度要复杂些,需要用户兼顾明细表关联的主表记录,避免写入的记录是一个孤立的数据,一般在录入主要记录时,会包含很多条附属的明细记录,演示效果如图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);
        }
    }
}

关于支出和收入、日志数据写入函数比较简单,这里就不再进行详细说明,读者可以参阅本书光盘示例。