为循环调用JavaScript中的SQL

Calling SQL in JavaScript for loop

本文关键字:中的 SQL JavaScript 调用 循环      更新时间:2023-09-26

我正在用JavaScript编写一组函数,用户可以在其中添加新行程或编辑现有行程。每个行程可以有(0-n)个与该行程相关的喷枪。无论哪种方式,保存和编辑函数都会调用rangeSaveGun。当从"保存新行程"函数调用时,此函数(如下)将完美执行。新记录将添加到数据库中并显示。然而,当从"edit trip"函数调用时,SQL与alert(SQL)中显示的完全相同,但记录从未保存到DB中。知道为什么吗?在这两种情况下,调用此操作只是为了向行程中添加新枪支(而不是编辑现有枪支)。

我的问题:在下面的函数中,当从"Edit"函数而不是"New"函数调用完全相同的函数时,为什么没有将行插入数据库?无论哪种方式,"sql"文本都是完全相同的(如"alert"中所验证的)。我错过了什么?"新"answers"编辑"功能都是通过点击按钮调用的,只需保存或编辑行程,然后在最后调用此rangeSaveGun功能。

我已经在使用标准的变通方法来确保关闭。我可以确认,所有3个变量(tripNum、input2temp和input3temp)都显示了所有场景中的预期值。所有值都是数字。

function rangeSaveGun(tripNum)
{
 var tbl2 = document.getElementById("mytable2");        
 var rowCount=tbl2.rows.length;
 for (var i = 1; i < rowCount; i++) {   
    var el = document.getElementById("GunVal"+i)
    if(el != null)
   {
     (function(i){
        var input2temp = document.getElementById("GunVal"+i).value;
        var input3temp = document.getElementById("Rounds"+i).value;
        var sql = 'INSERT INTO RangeShot (TripID, GunID, Rounds) VALUES ('+tripNum+', '+input2temp+', '+input3temp+')';
        db.transaction(function (tx) {tx.executeSql(sql, [])});     
        alert(sql);
      })(i);
   }
 }
}

我发现了问题。实际上,这是由于我调用了一个INSERT语句,该语句仍在运行,而另一个UPDATE语句正在运行。DB被第一个写语句锁定,因此第二个写语句从未执行。我不得不重新编写我的"更新"函数来按不同的顺序调用项目。

我最后更改的另一件事是将按钮类型从"提交"更改为"按钮"。

function rangeUpdateRecord() 
{
db.transaction(function (tx) {
    var input1temp = document.getElementById("Name").value;
    var input2temp = document.getElementById("Address").value;        
    var input3temp = document.getElementById("Lat").value;
    var input4temp = document.getElementById("Lng").value;
    var input5temp = document.getElementById("Duration").value;
    var input6temp = document.getElementById("Date2").value;
    var input7temp = document.getElementById("StartTime").value;
    var input8temp = document.getElementById("Notes").value;
        var idupdate = $("#id").val();

    var tbl2 = document.getElementById("mytable2");     
    var rowCount=tbl2.rows.length;
    for (var i = 1; i < rowCount; i++) { 
          var el = document.getElementById("GunVal"+i);
          if(el != null)
           {
              (function(i){            
            var input2temp = document.getElementById("GunVal"+i).value;
            var input3temp = document.getElementById("Rounds"+i).value;
            var sql = 'INSERT INTO RangeShot (TripID, GunID, Rounds) VALUES ('+idupdate+', '+input2temp+', '+input3temp+');';
            db.transaction(function (tx) {tx.executeSql(sql)});             
            //alert(sql);
            })(i);
          } 
    }
        db.transaction(function (tx) {
        tx.executeSql('UPDATE RangeTrip SET Name = ?, Address = ?, Lat = ?, Lng = ?, Duration = ?, Date2 = ?, StartTime = ?, Notes = ? WHERE id=?', [input1temp, input2temp, input3temp, input4temp, input5temp, input6temp, input7temp, input8temp, Number(idupdate)],rangeLoadAndReset(),onError);
        });     
});

}