Multiple inserts with JS (works in browser but in app generated by phonegap build not)

0

Updating the solution by @Sveen, changing var by const , however it worked only in the browser, in the app it continues to replicate only one value:

for (var i in dados.valor) {
const query = "INSERT INTO teste ...";    
localDB.transaction(function(transaction){
    transaction.executeSql(query);
});
}

Here is the excerpt with the JSON data to be imported:

var dados = { "valor": [ 
        {'cod': 72214600, 'rep_img': '', 'descricao': 'Chave phillips 1/4\" x 6\" VONDER', 'aplic': 'Indicada para fixar e soltar parafusos com fenda cruzada/phillips', 'destaque': 'Produzida em aço cromo vanádio\, proporcionando maior resistência e durabilidade. Possui acabamento niquelado que confere maior resistência contra oxidação/corrosão. Conta com ponta magnetizada que facilita tanto a colocação quanto a retirada de parafusos em locais de difícil acesso\, além de cabo anatômico em polipropileno que garante maior conforto para o operador.', 'unid': 'PC', 'categoria': 'manuais', 'emb_cont': '1 Chave phillips', 'emb_tp': 'Sem Embalagem', 'emb_mst': 144.00, 'emb_sub': 6.00, 'emb_unit': 1.00, 'caract': 'Medida/Número da ponta da chave da chave Phillips: Nº2 - 1/4\" @ Comprimento da haste da chave: 6\" - 152 mm @ Material da haste da chave: Aço cromo vanádio @ Acabamento da haste da chave: Niquelado @ Material do cabo da chave: Polipropileno @ Cor do cabo da chave: Amarelo'},

        {'cod': 2372214600, 'rep_img': '', 'descricao': 'Chave phillips 1/4\" x 6\" VONDER', 'aplic': 'Indicada para fixar e soltar parafusos com fenda cruzada/phillips', 'destaque': 'Produzida em aço cromo vanádio\, proporcionando maior resistência e durabilidade. Possui acabamento niquelado que confere maior resistência contra oxidação/corrosão. Conta com ponta magnetizada que facilita tanto a colocação quanto a retirada de parafusos em locais de difícil acesso\, além de cabo anatômico em polipropileno que garante maior conforto para o operador.', 'unid': 'PC', 'categoria': 'manuais', 'emb_cont': '1 Chave phillips', 'emb_tp': 'Sem Embalagem', 'emb_mst': 144.00, 'emb_sub': 6.00, 'emb_unit': 1.00, 'caract': 'Medida/Número da ponta da chave da chave Phillips: Nº2 - 1/4\" @ Comprimento da haste da chave: 6\" - 152 mm @ Material da haste da chave: Aço cromo vanádio @ Acabamento da haste da chave: Niquelado @ Material do cabo da chave: Polipropileno @ Cor do cabo da chave: Amarelo'}
]};

Full Code

function insereDados(){

var dados = { "valor": [ 
{"cod":"72214600","rep_img":"","descricao":"Chave phillips 1\/4\" x 6\" VONDER","aplic":"Indicada para fixar e soltar parafusos com fenda cruzada\/phillips","destaque":"Produzida em a\u00e7o cromo van\u00e1dio, proporcionando maior resist\u00eancia e durabilidade. Possui acabamento niquelado que confere maior resist\u00eancia contra oxida\u00e7\u00e3o\/corros\u00e3o. Conta com ponta magnetizada que facilita tanto a coloca\u00e7\u00e3o quanto a retirada de parafusos em locais de dif\u00edcil acesso, al\u00e9m de cabo anat\u00f4mico em polipropileno que garante maior conforto para o operador.","unid":"PC","categoria":"manuais","emb_cont":"1 Chave phillips","emb_tp":"Sem Embalagem","emb_mst":"144.00","emb_sub":"6.00","emb_unit":"1.00","caract":"Medida\/N\u00famero da ponta da chave da chave Phillips: N\u00ba2 - 1\/4\" @ Comprimento da haste da chave: 6\" - 152 mm @ Material da haste da chave: A\u00e7o cromo van\u00e1dio @ Acabamento da haste da chave: Niquelado @ Material do cabo da chave: Polipropileno @ Cor do cabo da chave: Amarelo"},
{"cod":"3072700146","rep_img":"","descricao":"Chave phillips 1\/4\" x 6\" VONDER PLUS","aplic":"Indicada para fixar e soltar parafusos com fenda cruzada\/phillips","destaque":"Produzida em a\u00e7o cromo van\u00e1dio, proporcionando maior resist\u00eancia e durabilidade. Possui acabamento niquelado que confere maior resist\u00eancia contra oxida\u00e7\u00e3o\/corros\u00e3o. Conta com ponta magnetizada que facilita tanto a coloca\u00e7\u00e3o quanto a retirada de parafusos em locais de dif\u00edcil acesso, al\u00e9m de cabo anat\u00f4mico em polipropileno revestido com borracha termopl\u00e1stica que garante maior conforto para o operador.","unid":"PC","categoria":"manuais","emb_cont":"1 Chave phillips","emb_tp":"Sem Embalagem","emb_mst":"144.00","emb_sub":"6.00","emb_unit":"1.00","caract":"Medida\/N\u00famero da ponta da chave da chave Phillips: N\u00ba2 - 1\/4\" @ Comprimento da haste da chave: 6\" - 152 mm @ Material da haste da chave: A\u00e7o cromo van\u00e1dio @ Acabamento da haste da chave: Niquelado @ Material do cabo da chave: Polipropileno revestido com borracha termopl\u00e1stica @ Cor do cabo da chave: Preto e amarelo"},

]};



dados.valor.forEach(function(valor) {

var query = "INSERT INTO teste (cod, rep_img, descricao, aplic, destaque, unid, categoria, emb_cont, emb_tp, emb_mst, emb_sub, emb_unit, caract) VALUES ('" + valor[i].cod + "', '" + valor[i].rep_img + "', '" + valor[i].descricao + "', '" + valor[i].aplic + "', '" + valor[i].destaque + "', '" + valor[i].unid + "', '" + valor[i].categoria + "', '" + valor[i].emb_cont + "', '" + valor[i].emb_tp + "', '" + valor[i].emb_mst + "', '" + valor[i].emb_sub + "', '" + valor[i].emb_unit + "', '" + valor[i].caract + "');";


    localDB.transaction(function(transaction){
    transaction.executeSql(query);
});
});

}
    
asked by anonymous 28.03.2018 / 19:03

1 answer

0

Explanation

Whenever you loop, the value of the query variable is changed (even before it is executed), so when the first transaction is executed it picks up the value that has already been changed several times .

Solution 1

Try to use the const modifier instead of var for query variable, to prevent the transaction oncomplete from always taking the last loop value. The rest can continue exactly the same.

for (var i in dados.valor) {
    const query = "INSERT INTO teste ...";    
    localDB.transaction(function(transaction){
        transaction.executeSql(query);
    });
}

Solution 2

If it does not work, depending on the version of Javsacript , another solution is to use forEach , so you do not risk reusing the same variable, since each data will be in a different instance

dados.valor.forEach(function(valor) {
   var query = "INSERT INTO teste (...) VALUES ('" + valor.cod + "', '" + valor.rep_img + "', '" + valor.descricao + "', '" + valor.aplic + "', '" + valor.destaque + "', '" + valor.unid + "', '" + valor.categoria + "', '" + valor.emb_cont + "', '" + valor.emb_tp + "', '" + valor.emb_mst + "', '" + valor.emb_sub + "', '" + valor.emb_unit + "', '" + valor.caract + "');";
    localDB.transaction(function(transaction){
        transaction.executeSql(query);
    });
});

remembering that valor of forEach is an array containing the data to be entered, the same as dados.valor[i] in the previous script.

    
28.03.2018 / 23:03