Функция удалять javascript базу данных IndexedDb

Добрый вечер люди,

Прежде всего появляться меня зовут Аарон и я с проектом разработки Апп Андроид используя Intel xdk, после я выбрал для базы данных IndexedDb.

Я появилась проблема во время удаления данных, которых я ввожу в базе данных, вставление, если я она приношу пользу но стертое место, ничего не делает.

Я напечатаю здесь мой код, чтобы видеть, правилен ли синтаксис:

<!DOCTYPE html>
<html>
<head>
<title>Guasar análisis de progresión lineal</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">

<!-- see http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/quick-tip-dont-forget-the-viewport-meta-tag -->
<!-- <meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1"> -->
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1, user-scalable=no">
<!-- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes, minimum-scale=1, maximum-scale=2"> -->
<style>
    /* following two viewport lines are equivalent to meta viewport statement above, and is needed for Windows */
    /* see http://www.quirksmode.org/blog/archives/2014/05/html5_dev_conf.html and http://dev.w3.org/csswg/css-device-adapt/ */

    @-ms-viewport {
        width: 100vw;
        min-zoom: 100%;
        zoom: 100%;
    }

    @viewport {
        width: 100vw;
        min-zoom: 100% zoom: 100%;
    }

    @-ms-viewport {
        user-zoom: fixed;
        min-zoom: 100%;
    }

    @viewport {
        user-zoom: fixed;
        min-zoom: 100%;
    }
    /*@-ms-viewport { user-zoom: zoom ; min-zoom: 100% ; max-zoom: 200% ; }   @viewport { user-zoom: zoom ; min-zoom: 100% ; max-zoom: 200% ; }*/
  </style>
  <!-- See explanation at the bottom of this file for info regarding placement of JS libraries. -->
  <!-- These library references (below) are just examples to give you the general idea... -->
  <!-- <script src="lib/mc/hammer.js"></script> -->
  <!-- <script src="lib/ft/fastclick.js"></script> -->
  <!-- <script src="lib/jq/jquery.js"></script> debajo css -->
  <!-- Aquí definimos el tipo de base de datos -->
  <script type="text/javascript">

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

        function startDB() { //crea la base de datos IndexedDb

            dataBase = indexedDB.open("object", 1); //nombre de la base de datos y versión

            dataBase.onupgradeneeded = function (e) { // 

                var active = dataBase.result; //conector
                var object = active.createObjectStore("people", {keyPath: 'id', autoIncrement: true});//creación del objeto//keyPath es la clave primaria
                object.createIndex('by_name', 'name', {unique: false});
                object.createIndex('by_dni', 'dni', {unique: true});

            };

            dataBase.onsuccess = function (e) {
                //    alert('Database loaded');
                loadAll();//cuando se carga la base de datos queremos mostrar todos los registros
            };

            dataBase.onerror = function (e) {
                alert('Error al cargar la base de datos');
            };

        }

        function add() {
            var active = dataBase.result; //conector con la base de datos
            var data = active.transaction(["people"], "readwrite"); //array ,modo de transacción
            var object = data.objectStore("people");

            var request = object.put({
                dni: document.querySelector("#dni").value,
                name: document.querySelector("#name").value,
                surname: document.querySelector("#surname").value
            });

            request.onerror = function (e) {
                alert(request.error.name + '\n\n' + request.error.message);
            };

            data.oncomplete = function (e) { 

                document.querySelector('#dni').value = '';
                document.querySelector('#name').value = '';
                document.querySelector('#surname').value = '';
                alert('Object successfully added');
                loadAll();
            };

        }

          function delet() {

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

              var request = object.delete(document.querySelector("#dni_bo").value );

                // comprobar el error
              request.onerror = function (e) {
               alert('ERROR AL BORRAR\n\n' + request.error.name + '\n\n' + request.error.message);
              };
        }

        function load(id) {
            var active = dataBase.result;
            var data = active.transaction(["people"], "readonly");
            var object = data.objectStore("people");

            var request = object.get(parseInt(id));

            request.onsuccess = function () {
                var result = request.result;

                if (result !== undefined) {
                    alert("ID: " + result.id + "\n\
                           DNI " + result.dni + "\n\
                           Name: " + result.name + "\n\
                           Surname: " + result.surname);
                }
            };
        }

        function loadByDni(dni) {
            var active = dataBase.result;
            var data = active.transaction(["people"], "readonly");
            var object = data.objectStore("people");
            var index = object.index("by_dni");
            var request = index.get(String(dni));

            request.onsuccess = function () {
                var result = request.result;

                if (result !== undefined) {
                    alert("ID: " + result.id + "\n\
                           DNI " + result.dni + "\n\
                           Name: " + result.name + "\n\
                           Surname: " + result.surname);
                }
            };
        }

        function loadAll() {//carga todos los objetos del almacen
            var active = dataBase.result;
            var data = active.transaction(["people"], "readonly");//la transición para recibir datos de la base de datos
            var object = data.objectStore("people");//

            var elements = [];

            object.openCursor().onsuccess = function (e) {//puntero al inicio del almacen

                var result = e.target.result;

                if (result === null) { //llegamos al final
                    return;
                }

                elements.push(result.value);
                result.continue();

            };

            data.oncomplete = function () {

                var outerHTML = '';

                for (var key in elements) {

                    outerHTML += '\n\
                    <tr>\n\
                        <td>' + elements[key].dni + '</td>\n\
                        <td>' + elements[key].name + '</td>\n\
                        <td>\n\
                            <button type="button" onclick="load(' + elements[key].id + ')">Details</button>\n\
                            <button type="button" onclick="loadByDni(' + elements[key].dni + ')">Details DNI</button>\n\
                        </td>\n\
                    </tr>';

                }

                elements = [];
                document.querySelector("#elementsList").innerHTML = outerHTML;
            };
        }

        function loadAllByName() {
            var active = dataBase.result;
            var data = active.transaction(["people"], "readonly");
            var object = data.objectStore("people");
            var index = object.index("by_name");

            var elements = [];

            index.openCursor().onsuccess = function (e) {

                var result = e.target.result;

                if (result === null) {
                    return;
                }

                elements.push(result.value);
                result.continue();

            };

            data.oncomplete = function () {

                var outerHTML = '';

                for (var key in elements) {

                    outerHTML += '\n\
                    <tr>\n\
                        <td>' + elements[key].dni + '</td>\n\
                        <td>' + elements[key].name + '</td>\n\
                        <td>\n\
                            <button type="button" onclick="load(' + elements[key].id + ')">Details</button>\n\
                            <button type="button" onclick="loadByDni(' + elements[key].dni + ')">Details DNI</button>\n\
                        </td>\n\
                    </tr>';

                }

                elements = [];
                document.querySelector("#elementsList").innerHTML = outerHTML;
            };
        }

    </script>  
</head>

<body onload="startDB();"> 

<link rel="stylesheet" href="css/app.css">

<script src="cordova.js"></script>
<!-- "Phantom" cordova.js required for projects that use plugins --> 
<script src="js/app.js"></script>
<!-- for your event code, see README and file comments for details -->
<script src="js/init-app.js"></script>
<!-- for your init code, see README and file comments for details -->
<script src="xdk/init-dev.js"></script>
<!-- normalizes device and document ready events, see file for details -->
<script src="js/util.js"></script>

<h1>Bienvenido a Guasar</h1>
<div>
 <h2>¿Que tipo quieres?</h2> 
 <button onclick="hideBanner()">Humphrey</button>
 <!--<button onclick="showBanner()">Octupus</button>    

<button onclick="removeBanner()">Remove Banner Ad</button>
<button onclick="createInterstitial()">Create Interstitial Ad</button> 
<button onclick="showInterstitial()">Show Interstitial Ad</button>-->
</div>
<div class="align-center">
<h2>GUARDAR REGISTROS</h2>
    <input type="text" id="dni" placeholder="Nº Historia" />
    <input type="text" id="name" placeholder="Nombre" />
    <input type="text" id="surname" placeholder="Apellidos" />
    <button type="button" onclick="add();">Guardar</button>  
    <input type="text" id="id" placeholder="id"/>
    <button type="button" onclick="delet();">Borrar</button>
    <!--Función que busca datos sobre un dni almacenado de la base de datos 
    <input type="text" id="dni" placeholder="DNI"/>
    <!-- <button type="button" onclick="loadByDni();">Buscar</button> -->
    <!--Botón que vuelve hacia atrás-->
    <button onclick="self.location='prueba.html'">DATOS</button>
    <hr>
  </div>
 </body>     
</html>
2
задан 09.03.2016, 12:30
1 ответ

Неудача: ты не перемещаешь ключ подходящий для того, чтобы идентифицировать реестр, который ты хочешь удалить в "people". Согласно документации API IndexedDB, методу delete() такое взятие как параметр ключ реестра, который он нужно удалять, но в коде наверху перемещают его dni (и в первоначальном коде перемещали его полный реестр):

var request = object.delete(document.querySelector("#dni_bo").value );

Что конечно неправильный, потому что ты изменил ему идентификацию в поле текста "dni_bo" в "id", так что даже, если бы "dni" был ключом (который это не), эта линия кода (и стертое место) не удалась бы.

Создав "people" ты определяешь "пойдите", как первичный ключ, тогда стертое место было бы должно делаться перемещая стоимость "id". Важная информация: пойдите это целое число (int), тогда для того, чтобы стертое место осуществилось правильным способом, должна проходить стоимость как целое число и не как string. Если ты не используешь parseInt, стоимость считается string и стертое место не удается.

Если поле текста, который ты используешь, чтобы удалять реестр, содержит "id", эта функция стертого места функционирует сейчас без проблем:

function delet() {

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

    var request = object.delete( parseInt( document.querySelector("#id").value ) );

}

Если взамен то, что содержит поле текста, является dni пользователя, тогда стертое место должно делаться в двух шагах:

  1. Искать реестр, который есть у этого dni
  2. Удалять реестр с расположенным напротив id

И код функции стертого места был бы таким:

function delet() {

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

    // primero buscamos el registro a partir del dni
    var index = object.index("by_dni");
    var request = index.get(document.querySelector("#dni").value);

    // cuando se encuentre el registro, lo borramos
    request.onsuccess = function () {
        var result = request.result;
        object.delete(result.id);
    };
}

HTML:

<h2>BORRAR REGISTROS POR DNI</h2>
<input type="text" id="dni" placeholder="dni"/>
<button type="button" onclick="delet();">Borrar x DNI</button>
1
ответ дан 24.11.2019, 14:45
  • 1
    Большое спасибо Альваро из-за тебя ответы я думаю, что ошибка состоит в том, что я перемещаю его плохо пару и # 225; метр, чтобы удалять объект almac и # 233; n. Aqu и # 237; я присоединяю тебя задержание, как сохраняют в базе данных каждый объект: Изображение база данных И adem и # 225; s я присоединяю тебя c и # 243; я говорю целое число, потому что у меня есть сомнения в, как удалять реестры базы данных в Indexeddb я это поместил в начальный вопрос c и # 243; я говорю целое число. БОЛЬШОЕ СПАСИБО СНОВА. Приветствие. Aar и # 243; n Край – Aaron VC 09.03.2016, 13:52
  • 2
    Я обратил внимание сейчас, когда я должен перемещать keypath, который в этом случае пойдите и не dni, но останься, не функционируя nose, потому что, когда я даю bot и # 243; n удаления он остается нажатым и он ничего не делает и не прыгает ning и # 250; n ошибка ты colge достигает c и # 243; я говорю, что я завершаю. – Aaron VC 09.03.2016, 15:01
  • 3
    @AaronVC S и # 237; modifiqu и # 233; ответ, чтобы это отражать. Сейчас стертое место функционирует для м и # 237; – Alvaro Montoro♦ 09.03.2016, 15:02
  • 4
    Большое спасибо Альваро ты один м и # 225; хина. Функционируй совершенно оно она функционирует удалять из-за id. Другой funci и # 243; n, который ты переместил меня, чтобы удалять из-за dni, я не идет, я изменил тебя под funci и # 243; n, что я pasastes для того, чтобы ты увидел, как я подбираю проверенный DNI.He помещая поле dni и by_dni, и не идет bot и # 243; n удаления. – Aaron VC 09.03.2016, 19:41
  • 5
    @AaronVC в edici и # 243; n, который ты предложил (rechac и # 233;), у поля текста есть один пойдите " dni" но мой funci и # 243; n est и # 225; написанная для поля с id " id". c и # 225; mbia селектор в var request = index.get(document.querySelector("#id").value); из-за var request = index.get(document.querySelector("#dni").value); и быть должным и # 237; чтобы функционировать – Alvaro Montoro♦ 09.03.2016, 19:47