Как получить логическое возвращение из этой функции sqlrunner? - PullRequest
0 голосов
/ 06 марта 2011

Надеюсь, вы можете увидеть немного из кода, что я пытаюсь сделать здесь, в основном мне нужно проверить, существует ли запись в базе данных, поэтому я вызываю функцию для этого, но я использую sqlrunnerкласс, в котором результат запроса вызывается как ответ на событие, и я не знаю, как получить это значение из результирующей функции обратно к родителю.Я чувствую, что должен делать что-то задом наперед или что-то в этом роде.

        public function dbmatch(datetime:String, typecode:String):Boolean {
            var q:String = "SELECT DateTime FROM Event WHERE DateTime='"+datetime+"' AND EventTypeCode='"+typecode+"'"
            SQLService.getInstance().execute(q,null,matchresult);
            function matchresult(result:SQLResult):Boolean{
                var match:String = result.data[0];
                if (match == null){return false} else {return true}
            }
            return matchresult();
        }

в другом месте:

var recordexists:Boolean = dbmatch(datetime, "Gb");

if (!recordexists){...}

1 Ответ

1 голос
/ 07 марта 2011

В основном проблема в том, что класс SQLService не может немедленно вернуть результат для вашего запроса. Вот почему он использует функцию прослушивания обратного вызова (matchresult в вашем примере), чтобы сообщить вашей программе позднее, что она завершила поиск.

Базовым способом обработки этого является вызов запроса, а затем ожидание запроса «обратного вызова» к функции прослушивания, которая затем может продолжить выполнение.

public function dbmatch(datetime:String, typecode:String, callbackListener:Function):void {
    var q:String = "SELECT DateTime FROM Event WHERE DateTime='"+datetime+"' AND EventTypeCode='"+typecode+"'"
    SQLService.getInstance().execute(q, null, callbackListener);
}

В другом месте:

    // Start the query, but can't react to it immediatly        
    dbmatch(datetime, "Gb", onSQLQueryResult);

    // Your callback function
    public function onSQLQueryResult(result:SQLResult):void {
        var match:String = result.data[0];
        if (match == null) {
            // Do stuff you were going to do at (!recordexists)
        }
    }
...