Create another database objects database Indexeddb

0

Good afternoon,

I have a database in IndexedDb with a store of objects but I would like to add another store because one would be for a patient's data and another one would be for the tests of the same that have the DNI and several more fields where can store test values.

//crear objeto de la base de datos para las distintos navegadores
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
var dataBase = null; //variable global

//crea la base de datos IndexedDb
function startDB() {
  dataBase = indexedDB.open("object", 1); //nombre de la base de datos y versión
  
  dataBase.onupgradeneeded = function (e) { // 
    //conector
    var active = dataBase.result;
    //creación del objeto//keyPath es la clave primaria
    var object = active.createObjectStore("people", {
      keyPath: 'id',
      autoIncrement: true
    });
    
    object.createIndex('by_name', 'name', {unique: false});
    object.createIndex('by_dni', 'dni', {unique: true});
  }
};

Thank you very much.

    
asked by Aaron VC 11.03.2016 в 20:07
source

2 answers

2

Your code would look something like the following:

//crear objeto de la base de datos para las distintos navegadores
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
var dataBase = null; //variable global

//crea la base de datos IndexedDb
function startDB() {
    //nombre de la base de datos y versión
    dataBase = indexedDB.open('object', 1);

    dataBase.onupgradeneeded = function (e) { // 
        //conector
        var active = dataBase.result;

        //creación del objeto//keyPath es la clave primaria
        var storePeople = active.createObjectStore("people", {
            keyPath: 'id',
            autoIncrement: true
        });

        storePeople.createIndex('by_name', 'name', {unique: false});
        storePeople.createIndex('by_dni', 'dni', {unique: true});

        // Aqui comienza el otro almacen de datos.
        var storeTest = active.createObjectStore("test", {
            keyPath: 'id',
            autoIncrement: true
        });

        storeTest.createIndex('by_name', 'name', {unique: false});
        storeTest.createIndex('by_dni', 'dni', {unique: true});
    }
};
  <!-- función que añade nuevos registros -->     
 function addprueba() {

            var active = dataBase.result;
            var data = active.transaction(["test"], "readwrite"); 
            var object2 = data.objectStore("test");

            var request = object2.put({
                dni: document.querySelector("#dni").value,
                md: document.querySelector("#md").value,
                slv: document.querySelector("#slv").value,
                mes: document.querySelector("#mes").value,
                anyo: document.querySelector("#anyo").value
            });
       request.onerror = function (e) {
                alert(request.error.name + '\n\n' + request.error.message);
            };

            data.oncomplete = function (e) { 

                document.querySelector('#dni').value = '';
                document.querySelector('#md').value = '';
                document.querySelector('#slv').value = '';
                document.querySelector('#mes').value = '';
                document.querySelector('#anyo').value = '';
                alert('Object successfully added');
            };

        }
        <!-- Aquí recojo los datos para introducirlos en el almacén de objetos prueba -->
        <input type="text" id="dni" placeholder="DNI" />
        <input type="text" id="md" placeholder="MD" />
        <input type="text" id="slv" placeholder="sLv" />
        <input type="text" id="mes" placeholder="Mes" />
        <input type="text" id="anyo" placeholder="Año" />
        <button type="button" onclick="addprueba();">Guardar</button>               

Staying as follows:

Structure with focus POO

I recommend you follow a structure for your code focused on POO (Object Oriented Programming), something like the following:

var App = {
    requestDB: null,
    db: null,

    init: function () {
        this.requestDB = indexedDB.open('object', 1);

        this.requestDB.addEventListener(
            'upgradeneeded',
            this.onupgradeneeded.bind(this)
        );
        this.requestDB.addEventListener(
            'success',
            this.onsuccess.bind(this)
        );
    },

    onupgradeneeded: function (e) {
        this.db = this.requestDB.result;

        /* Almacenamiento: People */
        var storePeople = this.db.createObjectStore('People', {
            keyPath: 'id',
            autoIncrement: true
        });

        storePeople.createIndex('by_name', 'name', {unique: false});
        storePeople.createIndex('by_dni', 'dni', {unique: true});

        /* Almacenamiento: Test */
        var storeTest = this.db.createObjectStore('Test', {
            keyPath: 'id',
            autoIncrement: true
        });

        storeTest.createIndex('by_name', 'name', {unique: false});
        storeTest.createIndex('by_dni', 'dni', {unique: true});
    },

    onsuccess: function (e) {
        this.db = this.db || this.requestDB.result;

        /* Aquí tu código */
    }
};

In the end you would only call App.init() to initialize everything.

    
answered by 11.03.2016 в 20:36
0
function startDB() {

            dataBase = indexedDB.open("storeTest", 1);

             dataBase.onupgradeneeded = function (e) {

                var active = dataBase.result;
                var object = active.createObjectStore("people", {
                keyPath: 'id', 
                autoIncrement: true
                });

                object.createIndex('by_name', 'name', {unique: false});
                object.createIndex('by_dni', 'dni', {unique: true});

                /* Almacenamiento: Test */
                var storeTest = active.createObjectStore('test', {
                keyPath: 'id',
                autoIncrement: true
                });
                storeTest.createIndex('by_dni', 'dni', {unique: true});

            };

The error I had was when executing the function startDB I was opening the database as an object and I changed it to storeTest and if I created the data in that store. How could I open the database so that it could be used? several functions and be able to add data to both.

Thanks

    
answered by 12.03.2016 в 20:34