0

受話器に詳細を保存するSQLiteデータベースを備えたモバイルアプリがあります。このテーブルの内容をPHP経由でリモートのmySQLサーバーに同期したいと思います。

以下を使用して、リモートサーバーに行を書き込みます。

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クエリによって返される行数に応じて複数回投稿されますが、2回目の実行では正しく投稿されますが、これはなぜですか?

私はこれを何時間も見つめてきましたが、どこが間違っているのかわかりません。

任意の提案をいただければ幸いです。

4

2 に答える 2

0

ソートする必要がありますが、ORDERBYステートメントを含めません。
SQLは、デフォルトで主キーでソートします。

そのキー以外のものでソートするには、ORDERBY式で指定する必要があります。オプションで、ORDER BY式の後に、キーワードASC(小さい値が最初に返される)またはDESC(大きい値が最初に返される)のいずれかを続けることができます。ASCもDESCも指定されていない場合、デフォルトでは、行は昇順(小さい値が最初)にソートされます。

于 2012-10-17T13:31:45.747 に答える
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.");
}

execute()メソッドのヘルプで説明されているように

于 2012-10-17T14:39:50.293 に答える