【问题标题】:How to get boolean return from this sqlrunner function?如何从此 sqlrunner 函数获得布尔返回?
【发布时间】:2011-03-06 19:30:30
【问题描述】:

希望您可以从代码中看到我在这里尝试做的事情,基本上我需要检查数据库中是否存在记录,所以我调用了一个函数来执行此操作,但我使用的是 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){...}

【问题讨论】:

  • 到底是什么问题?它总是返回 true 吗?
  • @EyeSeeEm 我所拥有的实际上并没有提取返回表单 matchresult .. 它需要一个参数,但我不知道该怎么说。主要问题是 matchresult 最初是由事件侦听器调用的,我不知道它的返回结果。
  • 啊,我明白了。然后我认为你需要改变程序流程。结果不能立即返回,因此您需要等待(即监听)它完成,然后继续执行。如果您需要它,我可以尝试编写一个示例,尽管我不确定它是否适用于您的情况,但它可能有助于澄清事情。
  • 我需要它来发送它自己的自定义事件吗?我不断遇到这种情况,我想知道我是否以错误的方式处理事情。我只需要运行一个查询来检查是否存在某些东西,但是 sqlrunner 类似乎只适用于结果处理程序,所以我不知道该怎么做......

标签: actionscript-3 event-handling boolean return-value


【解决方案1】:

基本上,问题在于 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)
        }
    }

【讨论】:

  • 回调函数对我来说是新的..这看起来应该可以工作..但是,回调函数没有被调用..
  • 它还说 '3590: void used where a Boolean value is expected.表达式将被强制转换为布尔值。在 'dbmatch(datetime, "GB".. 行
  • @damon 您是否将 dbmatch 函数的返回类型更改为 void?还是您仍在尝试将函数的返回值分配给您的 recordexists 变量?这将不再起作用,因为 dbmatch 不再返回任何内容,它只会初始化 SQL 查询。
  • 我想知道是不是因为我的 onSQLQuery Result 函数在另一个函数内(它在那里是因为它需要的值在 forloop 中循环,然后在它完成时执行.. 我不能轻易接受从那以后我需要将参数传递给 onBgCheckResult..
  • (是的,根据您发布的代码,现在一切都是无效的)
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 2020-07-25
  • 2021-02-16
  • 1970-01-01
  • 2017-06-07
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多