質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

解決済

indexeddb での複数のindex作成について

tetsu777
tetsu777

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

1回答

0評価

0クリップ

33閲覧

投稿2018/11/06 05:19

編集2022/01/12 10:58

IndexeddbのcreateIndexにて複数のindexを作成し、検索をかけたいのですが、下コードのうち、indexがmyvalueIndexしか動作しません。
(getKey(event)は動作しますが、getAllcate(event)が動作しません)
何処を修正すれば複数のindexを利用することが出来るのでしょうか?
ちなみにiOS版sfariで動作確認しています

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>Indexed DataBase APIサンプル</title> </head> <body> <h3>登録・更新</h3> キー:<input type="text" id="newkey" /> バリュー:<input type="number" id="newvalue" /> バリュー2:<input type="number" id="newvalue2" /> <input type="button" value="設定" onclick="setValue()"/> <hr /> <h3>参照</h3> <input type="button" value="全取得" onclick="getAll()"/> <hr /> <h3>インデックスを使った検索</h3> <input type="number" id="selectValue1" />~<input type="number" id="selectValue2" /> <input type="button" value="検索" onclick="getKey()"/> <hr /> <h3>処理結果</h3> <div id="result"></div> <h3>登録・更新</h3> <!--キー:<div onclick="getAllcate()">iui<input type="text" id="newkeynew"/></div>--> <input type="number" id="selectValue3" /> <input type="button" value="検索" onclick="getAllcate()"/> <hr /> <h3>処理結果2 </h3> <div id="result2"></div> </body> <script> var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.msIndexedDB; if (indexedDB) { // データベースを削除したい場合はコメントを外します。 //indexedDB.deleteDatabase("mydb"); var openRequest = indexedDB.open("mydb", 1.0); openRequest.onupgradeneeded = function(event) { // データベースのバージョンに変更があった場合(初めての場合もここを通ります。) db = event.target.result; var store = db.createObjectStore("mystore", { keyPath: "mykey" ,autoIncrement:true }); store.createIndex("myvalueIndex",["myvalue","myvalue2"] ,{unique:false,multiEntry:false} ); store.createIndex("myvalueIndexcate",["myvalue"] ,{unique:false,multiEntry:false} ); } openRequest.onsuccess = function(event) { db = event.target.result; } } else { window.alert("このブラウザではIndexed DataBase API は使えません。"); } function setValue(event) { var key = document.getElementById("newkey").value; var value = Number(document.getElementById("newvalue").value); var value2 = Number(document.getElementById("newvalue2").value); var transaction = db.transaction(["mystore"], "readwrite"); var store = transaction.objectStore("mystore"); var request = store.put({ mykey: key, myvalue: value, myvalue2: value2}); request.onsuccess = function (event) { document.getElementById("newkey").value = ""; document.getElementById("newvalue").value = ""; document.getElementById("newvalue2").value = ""; } } function getAll(event) { var result = document.getElementById("result"); result.innerHTML = ""; var transaction = db.transaction(["mystore"], "readwrite"); var store = transaction.objectStore("mystore"); var request = store.openCursor(); request.onsuccess = function (event) { if(event.target.result == null) { return; } var cursor = event.target.result; var data = cursor.value; result.innerHTML += "key:" + cursor.key + " value:" + data.myvalue + " value2:" + data.myvalue2 +"<br/>"; cursor.continue(); } } function getKey(event) { var value1 = Number(document.getElementById("selectValue1").value); var value2 = Number(document.getElementById("selectValue2").value); var result = document.getElementById("result"); result.innerHTML = ""; var transaction = db.transaction(["mystore"], "readwrite"); var store = transaction.objectStore("mystore"); var index = store.index("myvalueIndex"); // var range = IDBKeyRange.bound(value1, value2); //var request = index.openCursor(range); var request = index.openCursor([value1,value2],"next"); request.onsuccess = function (event) { if(event.target.result == null) { return; } var cursor = event.target.result; var data = cursor.value; result.innerHTML += "value:" + data.myvalue + "value2:" + data.myvalue2 + " key:" + data.mykey + "<br/>"; cursor.continue(); } } function getAllcate(event) { var value3 = Number(document.getElementById("selectValue3").value); var result = document.getElementById("result"); result.innerHTML = ""; var transaction = db.transaction(["mystore"], "readwrite"); var store = transaction.objectStore("mystore"); var index = store.index("myvalueIndexcate"); // var range = IDBKeyRange.bound(value1, value2); //var request = index.openCursor(range); var request = index.openCursor([value3],"next"); request.onsuccess = function (event) { if(event.target.result == null) { return; } var cursor = event.target.result; var data = cursor.value; result.innerHTML += "value:" + data.myvalue + "value2:" + data.myvalue2 + " key:" + data.mykey + "<br/>"; cursor.continue(); } } </script> </html>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806
m.ts10806

2018/11/06 07:34

「getAllcateが動作しない」とは何が起きているのでしょうか。起きている現象・問題・エラーメッセージを具体的に記載してください。あとは「複数のindexを利用」だと色々な意味に捉えられるように思うので、ゴールをわかりやすく明確に記載してください。
tetsu777
tetsu777

2018/11/07 23:18

ご教示ありがとうございます。一旦データベースを削除したら希望していた動作をしてくれました。お騒がせいましました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。