次のようなスクリプトを使用してsqlite3データベースへの接続を作成しようとしました(主なアイデアはstackoverflowの回答から来ました)。ファイル「checkbook.js」には接続機能があり、接続を使用することになっている機能の下で、データベースを読み取り、フォームのいくつかのフィールドに入力します。
function connect_db(){
var xhr = new XMLHttpRequest();
xhr.open('GET', 'checks.db', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
var uInt8Array = new Uint8Array(this.response);
db = new SQL.Database(uInt8Array);
};
xhr.send();
}
function fill_status(){
var contents = window.db.exec("SELECT rowid,name FROM aux_status");
values = contents[0].values;
for (j=0;j<values.length;j++){
var select = document.getElementById('status')
var option = document.createElement('option');
select.appendChild(option);
option.value = values[0];
option.innerHTML=values[1];
}
}
「checkbook.js」ファイルは、次の「checks.html」ファイルで呼び出されます。
<!DOCTYPE html>
<html>
<head>
<title>Checkbook v0.0.1</title>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<link rel='icon' type='image/png' href='images/logo_ioniatex_bbg.png'>
<link rel='stylesheet' type='text/css' href='css/general.css'>
<script type='text/javascript' src='jscripts/general.js'></script>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<link rel='stylesheet' href='bootstrap-3.3.5-dist/css/bootstrap.min.css'>
<script src='bootstrap-3.3.5-dist/jquery-1.12.0.min.js'></script>
<script src='bootstrap-3.3.5-dist/js/bootstrap.min.js'></script>
<script src="sql.js"></script>
<script src="checkbook.js"></script>
</head>
<body>
...
<script>var db;connect_db();fill_status();</script>
</div>
</body>
</html>
しかし、(Firefoxで)ファイルを開くと、firebugからメッセージが表示されます
TypeError: window.db is undefined
var contents = window.db.exec("SELECT rowid,name FROM aux_status");
何が恋しいですか?var
関数「fill_status」を呼び出しても、を使用してまたは使用せずに db 変数を宣言しようとしましwindow.db
たが、それでも同じ答えが得られます。必要なデータ抽出ごとにデータベースへの新しい接続を呼び出さないようconnect_db
に、html ファイルの先頭で関数を実行し、いくつかのコードの後にグローバル変数を使用する別のコードを実行したいと思います。db