2012-07-02 32 views
1

相當尷尬真的,但我測試了從this example創建從修改劇本電子表格中的數據庫:試圖抹掉ScriptDb的數據庫出現故障,由於我的錯誤

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()我得到拋出,例如與此腳本here服務器錯誤:

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,布爾值)。 (第114行)

順便說一下,我可以成功地將新記錄保存到數據庫,並通過查詢檢索該記錄,但是如果查詢返回的數據庫中有缺陷腳本創建的其他內容,那是當我嘗試使用生成的對象時遇到失敗。

所以我明白我的錯誤,並承諾將來會更加小心,但是有誰知道我可以「清理」我的數據庫以重新開始嗎?

回答

0

確定虛警我想,我再次嘗試,我現在能夠清除數據庫。

0

我認爲這不是一個虛驚,我經歷了類似的行爲時,通過ScriptDb運行的函數超過執行時間。當您嘗試刪除ScriptDb時,ScriptDb變得無法響應,或者與受執行時間錯誤影響的對象以某種方式進行交互。看來你所能做的只是等待,然後一切都恢復正常。 最佳做法是建立策略以防止與ScriptDb交互的函數達到執行時間限制。