1

真的很尴尬,但我测试了从电子表格创建数据库,并使用此示例中的修改脚本:

function loadDatabaseFromSheet() {
  var sheet = SpreadsheetApp.openById('my_key').getSheetByName('Payroll');
  var data = sheet.getDataRange().getValues();
  data = data.splice(0, 9);                 // **this is where I went wrong**
  var keys = data[0];                       // **this actually corresponds with a blank row**
  var db = ScriptDb.getMyDb();
  for (var row = 1; row < data.length; row++) {
    var rowData = data[row];
    var item = {};
    for (var column = 0; column < keys.length; column++) {
      item[keys[column]] = rowData[column]; // **null values used to name attributes???**
    }
    db.save(item);
  }
}

所以 Javascrit 菜鸟应该使用data.splice(0, 9)而不是data = data.splice(0, 9). 我想从数组中删除前九行,而不是保留它们。

无论如何,就目前而言,数据库似乎不可修复或不可擦除。我无法检索任何记录;每当我尝试调用 .next() 或 .hasNext() 时,都会引发服务器错误,例如使用此处的脚本:

function deleteAll() {
  var db = ScriptDb.getMyDb();
  while (true) {
    var result = db.query({}); // get everything, up to limit
    if (result.getSize() == 0) {
      break;
    }
    while (result.hasNext()) {
      db.remove(result.next());
    }
  }
}

.getSize() 确实有效,但是当脚本到达带有 .hasNext() 的行时,脚本会返回服务器错误,这可能是由于对象错误。我还尝试了批量删除:

function batchRemove() {
  var db = ScriptDb.getMyDb();
  var result = db.query({});
  db.removeBatch(result, false); 
}

我得到:

找不到方法 removeBatch($Proxy799,boolean)。(第 114 行)

顺便说一句,我可以成功地将新记录保存到数据库中,并通过查询检索该记录,但是如果查询返回数据库中使用有缺陷的脚本创建的任何其他内容,那么当我尝试时就会失败处理生成的对象。

所以我理解我的错误并承诺将来会更加小心,但有谁知道我如何“清理”我的数据库以重新开始?

4

2 回答 2

0

好吧,我猜是误报,我又试了一次,现在我可以清除数据库了。

于 2012-07-03T09:22:41.813 回答
0

我认为这不是虚惊一场,当在 ScriptDb 上运行的函数超过执行时间时,我也经历过类似的行为。当您尝试删除或以某种方式与受执行时间错误影响的对象交互时,ScriptDb 变得无响应。看来您所能做的就是等待,然后一切恢复正常。最佳实践是制定策略以防止与 ScriptDb 交互的函数达到执行时间限制。

于 2013-03-19T15:12:43.107 回答