0

I am having problems with a piece of code that reads records from a table and inserts data in another table. It doesn't execute all the sql transactions.

Here is the code:

            $(".btnRepetePed").live("click",function(){
            var pedido = $(this).val();
            db.transaction(function(tx){
                console.log("Pedido:" + pedido);
                tx.executeSql("SELECT p.pedido,p.cliente,p.obs,p.talao,p.obs,p.prazo,p.polvenda,p.datafat, p.tipo,p.valortotal,p.situacao,p.datacri,p.icms,p.cod_bonif,p.desc_bonif,p.cod_troca, pp.produto, pp.valor, pp.qtd, prod.peso, prod.descricao ,pp.desconto, pp.uni_embut, pp.quantidade FROM pedidos p INNER JOIN pedidos_produtos pp ON p.pedido = pp.pedido INNER JOIN produtos prod ON pp.produto=prod.codigo WHERE p.pedido=? ", [pedido], function(tx, rs){
                        var sql = "INSERT INTO carrinho (produto,descricao, peso, qtd, valor, desconto) VALUES(?,?,?,?,?,?)";

                        var len = rs.rows.length;
                        console.log("size:"+len);
                        var i = 0;
                        for(i=0;i<len;i++){
                            dados = [rs.rows.item(i).produto, rs.rows.item(i).descricao, rs.rows.item(i).peso,rs.rows.item(i).qtd, rs.rows.item(i).valor, rs.rows.item(i).desconto];
                            console.log(i);
                            (function(dados, sql) {
                                db.transaction(function(tx){
                                    tx.executeSql(sql,dados,function(){
                                        console.log(JSON.stringify(dados));
                                    },function(e){
                                        console.log("Código erro "+e.code);
                                        console.log("Código erro "+e.message);    
                                    }); 
                                });
                            })(dados,sql);
                        }

                        alert("Finished");
                        goURL("pedidos.html#novoPedido");
                },fail);    
            });

And here is the output from the console:

  • D/CordovaLog(17822): size:4
  • D/CordovaLog(17822): 0
  • D/CordovaLog(17822): 1
  • D/CordovaLog(17822): 2
  • D/CordovaLog(17822): 3

Fine up to here. There are 4 records and "console.log(i);" is executed 4 times.

Only after I touch the OK button from the 'alert("Finished");' command the following logs from the transactions are displayed:

  • D/CordovaLog(17822): [1010012,"F.TRIGO T1 MARIA INES C/FERMENTO 1KG",1,1,1.76,null]
  • D/CordovaLog(17822): [1020011,"F.TRIGO T1 REDE MACRO 5kg",5,2,6.53,null]
  • D/CordovaLog(17822): [1020004,"F.TRIGO T1 FLOCOS DE NEVE 1kg",1,112,1.3,null]

Sometimes it displays 2, sometimes 3 transaction logs, but it never executes all 4 transactions

I'm lost. Any ideas?

4

1 回答 1

0

当所有转换完成后,您需要提醒并调用 goURL。那么您需要在 console.log(JSON.stringify(dados)) 之前执行此操作,但是当 i == len-1 时:

tx.executeSql(sql,dados,function(){
    if(i == len-1)
    {
      alert("");
      goURL("...")
    }
    console.log(JSON.stringify(dados));
}, ...
于 2013-01-18T21:24:10.047 回答