Delete方法不适用于 IndexedDB HTML5...它返回成功,但记录未删除

5f0d552i  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(3)|浏览(146)

另一个问题,我得到的HTML5 IndexedDB ,使用桌面Chrome,是我不能删除一个记录从一个对象存储。onsuccess事件被触发,但记录仍然存在...我的ID是一个时间戳,只是因为我想实现一个工作的应用程序更快。我硬编码,但它仍然不工作。这真的很奇怪,因为onsuccess事件被触发...
代码中“执行”的部分如下:
请尝试{

if (localDatabase != null && localDatabase.db != null) 
        {
            var store = localDatabase.db.transaction("patients", "readwrite").objectStore("patients");
            var request = store.delete("1384882073632");

            request.onsuccess = function(event) 
            {

                alert("Patient deleted from DB");
                update_patients_stored();

                aux1.value = "";
                aux2.value = "";
                aux3.value = "";
                aux4.value = "";

            };

            request.onerror = function(event) 
            {
                alert("Error deleting");
            };
        }
    }
    catch(e)
    {
        alert(e);
    }

提前感谢!

izkcnapc

izkcnapc1#

我发现了一个类似的问题。非删除行为,但触发了onsuccess事件。尽管w3 IDBObjectStore.delete规范规定关键参数可以是任何类型,但我解决了它,强制将参数转换为数字:

//My version
//I use default autoIncrement for keys
var objectStore = db.createObjectStore(objStoreName,{autoIncrement:true});
//appears to need a number for the key (but retrieved from HTML as string
var request = db.transaction(objStoreName,'readwrite')
                    .objectStore(objStoreName)
                    .delete(Number(parent.id));
    request.onsuccess = function(e) {
        console.log("element deleted"); //sadly this always run :-(
    }

所以你的第四行应该是:

var request = store.delete(1384882073632); //integer id
//rather than (WRONG):
//var request = store.delete("1384882073632"); //WRONG! string id

试戴:
chrome -Manjaro Linux上的版本50.0.2661.94(64位)
还没有在其他环境或浏览器上测试过它,但我猜这就是您的问题所在。

d5vmydt9

d5vmydt92#

我确信您删除到了错误键请注意,数字,字符串和日期是不同键,即使它们是相同,如果您比较==
只要不违反数据库约束,IndexedDB就返回成功。在这种情况下,不删除任何记录。我建议在删除请求时返回已删除记录的数量,但不赞成。当然,我的库ydn-db做到了。

qgzx9mmu

qgzx9mmu3#

尝试将密钥放入Array中。

type IDBValidKey = number | string | Date | BufferSource | IDBArrayKey;

interface IDBArrayKey extends Array<IDBValidKey> {}

dbRequest.onsuccess = function (event: any) {
      const db: IDBDatabase = event.target.result;

      const transaction = db.transaction([albumStoreObjName], "readwrite");

      transaction.oncomplete = () => {
        subscriber.next();
        subscriber.complete();
      };

      const objectStore = transaction.objectStore(albumStoreObjName);
      const request = objectStore.delete([albumId]);

      // ...
    };

相关问题