2012-10-17 50 views
0

我有一個移動應用程序與SQLite數據庫來存儲手機上的詳細信息,我想通過PHP將此表的內容同步到遠程mySQL服務器。actionscript循環第二次工作

我使用以下命令將行寫入遠程服務器。

protected function button_clickHandler(event:MouseEvent):void 
     { 
      var result:SQLResult; 
      var numRows:int ; 
      conn = new SQLConnection(); 
      conn.open(file, SQLMode.CREATE); 
      selectStmt.sqlConnection = conn; 
      var sql:String = "SELECT * FROM surveyResponseHeader"; 
      selectStmt.text = sql; 
      selectStmt.execute(); 
      result = selectStmt.getResult(); 
      numRows = result.data.length; 
      trace (result.data.length); 
      trace (numRows); 
      for (var i:int = 0; i< numRows; i++){ 

       surveyresponse.surveyID = parseInt(result.data[i]["surveyID"]); 
       surveyresponse.surveySite =result.data[i]["surveySite"]; 
       surveyresponse.surveyReference = result.data[i]["surveyReference"]; 
       surveyresponse.siteManager =result.data[i]["siteManager"]; 
       surveyresponse.surveyDate = result.data[i]["surveyDate"]; 
       surveyresponse.surveyNextVisit = result.data[i]["surveyNextVisit"]; 
       surveyresponse.surveySignature = result.data[i]["surveySignature"]; 
       surveyresponse.surveyImage =result.data[i]["surveyImage"]; 
       surveyresponseheaderService.createSurveyresponseheader(surveyresponse); 

      } 

     } 

我的問題:

在第一次運行只有最後一排被髮布並張貼取決於由SQLLite查詢返回的行數多次,在第二次運行得當的帖子,爲什麼是這樣?

我已經盯着這個現在幾個小時,不能看到我要去哪裏錯了。

任何建議表示讚賞。

+1

您曾經試圖描繪出事情描述?例如從循環內result.data [i] [「surveyID」]。 p.s.我建議在點擊處理程序中不要包含所有的代碼,否則會造成顯着的延遲。而是使用異步方法。連接一次並使用它,而不是每次點擊重新連接。 –

+0

追蹤顯示我正確遞增,在第一次點擊事件我得到的最後結果3次,在第二次點擊我得到resulst 1,2和3,因爲它應該 –

+0

給與事件去,我100%肯定會工作像一個魅力 –

回答

0

我建議你添加事件偵聽器:

dbStatement.addEventListener(SQLEvent.RESULT, resultHandler); 
dbStatement.addEventListener(SQLErrorEvent.ERROR, errorHandler); 
dbStatement.execute(); 

然後在處理程序檢查結果:

function resultHandler(event:SQLEvent):void 
{ 
    var result:SQLResult = dbStatement.getResult(); 
    if (result != null) 
    { 
     var numRows:int = result.data.length; 
     for (var i:int = 0; i < numRows; i++) 
     { 
      var row:Object = result.data[i]; 
      trace("id:", row.id, ", name:", row.name, ", ssn:", row.ssn); 
     } 
    } 
} 

function errorHandler(event:SQLErrorEvent):void 
{ 
    trace("An error occured while executing the statement."); 
} 

help for execute() method

+0

OP正在同步打開連接,所以結果應該可用。 –

+0

恰恰「應該」 –

+0

好的,我已經添加了監聽器和處理程序,並且正確地追蹤了它,但是,在首次寫入遠程數據庫時,我仍然在第一次執行時獲得3個相同的條目,然後在第二次執行時獲得3個相同的條目,我無法理解爲什麼在第一次執行時出錯,在第二次執行時出錯,我開始懷疑數據服務可能是這裏的罪魁禍首 –

0

您希望它排序,但不包含ORDER BY語句。
SQL將默認按主鍵排序。

要對其他東西進行排序,則需要使用ORDER BY表達式對其進行指定。 ORDER BY experssion可以選擇跟隨其中一個關鍵字ASC(首先返回較小的值)或DESC(首先返回較大的值)。如果既沒有指定ASC也沒有指定DESC,則默認情況下,行按升序排序(較小值先排序)。

+0

排序沒有區別隊友,我試圖理解爲什麼在第一次執行時,它給了我最後一個記錄返回3次,第二次執行時,它給我所有3個記錄,因爲它應該。 –

+0

好吧,我已經添加了偵聽器和處理程序,並且它正確地追蹤了,但是,在第一次寫入遠程數據庫時,我仍然在第一次執行時獲得3個相同的條目,然後在第二次執行時獲得3個正確的條目,我無法理解它爲什麼是第一次執行錯誤,第二次執行正確,我開始懷疑數據服務可能是這裏的罪魁禍首 - Gavin Jones 43分鐘前 –

相關問題