0

テーブルからレコードを読み取り、別のテーブルにデータを挿入するコードに問題があります。すべての SQL トランザクションを実行するわけではありません。

コードは次のとおりです。

            $(".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);    
            });

そして、コンソールからの出力は次のとおりです。

  • D/CordovaLog(17822): サイズ:4
  • D/CordovaLog(17822): 0
  • D/CordovaLog(17822): 1
  • D/CordovaLog(17822): 2
  • D/CordovaLog(17822): 3

ここまではいい。4 つのレコードと「console.log(i);」があります。4 回実行されます。

'alert("Finished");' から OK ボタンをタッチした後でのみ コマンドを実行すると、トランザクションからの次のログが表示されます。

  • 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]

2 つ、場合によっては 3 つのトランザクション ログが表示されることがありますが、4 つのトランザクションすべてが実行されることはありません。

道に迷いました。何か案は?

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 に答える