How to insert a data set of an array into the WEBSQL with Ionic?

Asked

Viewed 557 times

0

I want to insert a data set in a local table (WEBSQL). The way I’m doing just inserts the last array set, wanted to store all objects.

To create my Websql I created this JS:

(function(){
    "use strict";
    angular.module("nhaac").value("DBLocalAdBebidas",{
        db:null,

        localdb: function() {
            this.db = window.openDatabase("NhaccDB", "1.0", "Banco Local", 2000);
            this.db.transaction(function(res) {
                res.executeSql("CREATE TABLE IF NOT EXISTS AD_BEBIDAS(nome_bebida_ad TEXT, valor TEXT, quantidade TEXT);", []);
            });
        }
    })
})();

In my controller I call it:

        // PEGA BEBIDAS SELECIONADAS      
        $scope.updateBebida = function(){
            var p = [];
            for (var i = 0; i < $scope.bebidasextras.length; i++) {
               var item = $scope.bebidasextras[i];
                console.log(item);
               if ( item.selected) {
                p.push(item )  
               }

            }

            $scope.selectedItems = p;
             var item;
            console.log('AQUI');

    //aqui vai percorrer todo o conteudo da variavel p, poderia ate dar
    //uma otimizada e deixar junto com o p.push(item), ai "economiza" um for
//    for(var i in p){
//        console.log('ENTROU NO FOR');
//        item = p[i];
//        console.log(item);
//        var titulo = p.filter(function(e) {
//            return e.titulo_promo == item.ad_bebida_titulo
//             console.log('VAI IMPRIMIR o array');
//            conlole.log(titulo);
//            console.log('Pegou o array');

//          })   


        // TESTA SE GUARDA A BEBIDA SELECIONADA
        // INSERINDO DADOS LOCALMENTE
        console.log('vai iniciar o localDB');
        DBLocalAdBebidas.localdb();
        console.log('Iniciou o localDB');

        DBLocalAdBebidas.db.transaction(function(res) {
            console.log('entrou na transação');
            res.executeSql("INSERT INTO AD_BEBIDAS (nome_bebida_ad, valor, quantidade) VALUES(?,?,?);", [item.ad_bebida_titulo, item.ad_bebida_valor, item.ad_bebida_quantidade]);
        });

    }
//}
})

But it only takes the last data, I would like to take all the data and put a condition where the field "item.ad_drunk" is > 0.

This is the data set I want to store:

inserir a descrição da imagem aqui

Any suggestions on how to do?

1 answer

1


You are filling the item variable with the last loop element:

for (var i = 0; i < $scope.bebidasextras.length; i++) {
    var item = $scope.bebidasextras[i]; // Aqui item pega o último elemento do laço
    if (item.selected) {
        p.push(item) // Você deve utilizar o array p ao invés da variável item 
    }
}

Using the variable p Yes you will have the values entered correctly:

angular.forEach(p, function(item){
    res.executeSql(
        "INSERT INTO AD_BEBIDAS (nome_bebida_ad, valor, quantidade) VALUES(?,?,?);", 
        [
            item.ad_bebida_titulo, 
            item.ad_bebida_valor, 
            item.ad_bebida_quantidade
        ]
    );
});
  • I just came back to thank you! Thank you so much! :))

Browser other questions tagged

You are not signed in. Login or sign up in order to post.