entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Ayuda SQLite

Buenas; de nuevo pidiendo un poco de ayuda ya habia frenado un poco el desarrollo de mi app pero reanude la actividad; tengo una cuestion y espero no paresca muy burda, el problema radica en que necesito ejecutar unas sentencias en este caso de SQLite pero no eh encontrado el modo de hacerlo se trata de una replica de una base de datos y por mas que eh dado vueltas no logro encontrar como ejecutar dichas instrucciones anexo ejemplo de mi codigo

//Copiar tablas y poblarlas
    function replicarBD(cadena) {
        //Necesito Crear la base de datos aqui
        //Creamos las tablas en caso de que no existan
        for (var i = 0; i < cadena.Tablas.length; i++) {
            alert(cadena.Tablas[i].Tabla);
            var table = "CREATE TABLE IF NOT EXISTS " + cadena.Tablas[i].Tabla + "(";
            var contCampos = 0;
            var camposBase = "";
            //Llamamos los campos que contendra la tabla
            for (var j = 0; j < cadena.Tablas[i].Campos.length; j++) {
                if (contCampos > 0) {
                    table += ",";
                    camposBase += ",";
                }
                camposBase += cadena.Tablas[i].Campos[j].NombreCampo;
                table += cadena.Tablas[i].Campos[j].NombreCampo;
                contCampos++;
            }
            table += ")";
            //Cadena "table" con todo el script de la creacion de la tabla
            alert(table);
            //Ejecutamos el script de la creacion de la tabla
            //Sentencia 
            //la variable de tipo cadena "camposBase" contiene los campos de la base de datos; para realizar el insert
            var insertar = 'INSERT INTO (' + camposBase + ') VALUES (';
            var valores = '';
            var contValores = 0;
            //Recorremos el contenido de las tablas para realizar el "insert" de cada uno de ellos 
            for (var w = 0; w < cadena.Tablas[i].Campos[0].Contenido.length; w++) {
                for (var z = 0; z < cadena.Tablas[i].Campos.length; z++) {
                    if (contValores > 0) {
                        valores += ",";
                    }
                    valores += cadena.Tablas[i].Campos[z].Contenido[w];
                    contValores++;
                }
                var scriptinsert = insertar + ' ' + valores + ')';
                alert(scriptinsert);
                //script de la consulta de inserccion
                valores = "";
                contValores = 0;
            };
         };
       }

0voto

GusGarsaky comentado

Sería bueno que mostraras lo que muestran los alert, para tener mejor idea de dónde podría estar el error.

1 Respuesta

1voto

white Puntos75880

Creo que el error es que cadena.Tablas es un objeto, y este no tiene el metodo length length se podria usar si fuera un array,

tienes dos soluciones, una es usar for( var x in cadena.Tablas ) otra es usar Object.keys(cadena.Tablas).length

con object.keys:

tu codigo quedaria asi:

function replicarBD(cadena) {
    //Necesito Crear la base de datos aqui
    //Creamos las tablas en caso de que no existan

    for (var i = 0; i < Object.keys(cadena.Tablas).length; i++) {
        alert(cadena.Tablas[i].Tabla);
        var table = "CREATE TABLE IF NOT EXISTS " + cadena.Tablas[i].Tabla + "(";
        var contCampos = 0;
        var camposBase = "";
        //Llamamos los campos que contendra la tabla

        for (var j = 0; j < Object.keys(cadena.Tablas[i].Campos).length; j++) {
            console.log()
            if (contCampos > 0) {
                table += ",";
                camposBase += ",";
            }
            camposBase += cadena.Tablas[i].Campos[j].NombreCampo;
            table += cadena.Tablas[i].Campos[j].NombreCampo;
            contCampos++;
        }
        table += ")";
        //Cadena "table" con todo el script de la creacion de la tabla
        alert(table);
        //Ejecutamos el script de la creacion de la tabla
        //Sentencia 
        //la variable de tipo cadena "camposBase" contiene los campos de la base de datos; para realizar el insert
        var insertar = 'INSERT INTO (' + camposBase + ') VALUES (';
        var valores = '';
        var contValores = 0;
        //Recorremos el contenido de las tablas para realizar el "insert" de cada uno de ellos 
        for (var w = 0; w < cadena.Tablas[i].Campos[0].Contenido.length; w++) {
            for (var z = 0; z < cadena.Tablas[i].Campos.length; z++) {
                if (contValores > 0) {
                    valores += ",";
                }
                valores += cadena.Tablas[i].Campos[z].Contenido[w];
                contValores++;
            }
            var scriptinsert = insertar + ' ' + valores + ')';
            alert(scriptinsert);
            //script de la consulta de inserccion
            valores = "";
            contValores = 0;
        };
     };
};

Edit: te dejo abajo tu codigo usando for .. in .. y join te simplifica el codigo y es mas legible :)

function replicarBD(cadena) {

    for(var x in cadena.Tablas)
    {
        var table = cadena.Tablas[x],
            query = "CREATE TABLE IF NOT EXISTS " + table.Tabla + "(",
            campos = {};

        for (var i in table.Campos)
        {
            if(!campos[table.Tabla])
                campos[table.Tabla] = [];

            campos[table.Tabla].push(table.Campos[i].NombreCampo);
        }

        query += campos[table.Tabla].join(', ');
        query += ")";

        alert(query);

        for (var field in table.Campos)
        {
            var query_insert = 'INSERT INTO (' + campos[table.Tabla].join(', ') + ') VALUES (';
            var fields = [];

            if(!table.Campos[0].Contenido[field])
                break;

            for(var i = 0; i < table.Campos.length; i++)
            {
                var field_content = table.Campos[i].Contenido[field];
                fields.push(field_content);
            }

            query_insert += fields.join(', ') + ')';

            alert(query_insert)
        }
    }
}

Update: no se la estructura de tu variable "cadena" la forma en que la imagine es esta:

    replicarBD({
        Tablas : [
            {
                Tabla : 'username',
                Campos : [
                    {NombreCampo : 'ID', Contenido : [1, 2]},
                    {NombreCampo : 'username', Contenido : ['user', 'user2']},
                    {NombreCampo : 'email', Contenido : ['[email protected]', '[email protected]']}
                ]
                },
            {
                Tabla : 'images',
                Campos : [
                    {NombreCampo : 'ID', Contenido : [1, 2]},
                    {NombreCampo : 'img', Contenido : ['img.jpg', 'img.png']},
                    {NombreCampo : 'path', Contenido : ['/var/', '/imgs/']}
                ]
                }
            ]
    });

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta