次のコードに問題があります。
ユーザーが既存の場所とゲームのドロップダウンから選択できるフォームがあります。存在しない場合は、[新しいゲーム/場所を追加]を選択して、ゲームの名前や場所をテキストフィールドに入力できます。 。彼らがこれを行うとき、私は新しいゲームや場所をデータベースに書き込み、新しく作成されたIDを取得して、セッションテーブル(ゲームセッションが記録されている場所)を正しく更新できるようにします。
新しい場所とゲームは正しく書き込まれていますが、新しい場所とゲームを追加すると、セッションテーブルのゲームフィールドと場所フィールドにnull値が表示されます。
新しいゲームと場所を挿入するときのコメントアウトされたアラートは、正しい値を返しています。
function addSession(tx){
var locationID = $('#location').val();
var gameID = $('#game').val();
if ($('#location').val() == '0'){
tx.executeSql(
'INSERT INTO locations (lTitle) VALUES (?)',
[$('#newLocation').val()],
function(tx, results){
locationID = results.insertId;
},
errorCB
);
}
if ($('#game').val() == '0'){
tx.executeSql(
'INSERT INTO games (lTitle) VALUES (?)',
[$('#newGame').val()],
function(tx, results){
gameID = results.insertId;
},
errorCB
);
}
var sSQL = 'INSERT INTO sessions (date, duration, location, game, notes) VALUES '
+ '("'+$('#date').val()+' '+$('#time').val()+':00.000"'
+',2.5,'+locationID+','+gameID+',"'+$('#notes').val()+'")';
tx.executeSql(
sSQL,
[],
function(tx,results){
//todo after successful entry
},
errorCB
);
}
最初は、セッションテーブルへの挿入がゲームテーブルとロケーションテーブルへの挿入の前に実行されていたためかもしれないと思っていましたが、この場合、ゲームフィールドとロケーションフィールドにnullではなく「0」が入力されます。
ゲームメニューまたはロケーションメニューの既存のアイテムを使用して新しいセッションを追加すると(IDは> 0になります)、挿入は正常に機能します。
データ型の競合に関連している可能性がある場合のセッションテーブルの設定は次のとおりです。返されたIDでparseIntを試しましたが、同じ結果になります
tx.executeSql(
'CREATE TABLE IF NOT EXISTS sessions ' +
'(id INTEGER PRIMARY KEY , ' +
'date TEXT, ' +
'duration REAL, ' +
'game INTEGER, ' +
'location INTEGER, ' +
'notes TEXT' +
')'
);