如何在大型Flex应用程序中管理许多openAsync()调用?

时间:2014-03-07 15:54:09

标签: actionscript-3 flex sqlite

我在我的应用程序中多次使用openAsync()函数来成功打开SQLite连接。但是最近我添加了更多使用openAsync()的代码,现在我得到了这个错误:

Error: Error #3110: Operation cannot be performed while SQLStatement.executing is true.
at Error$/throwError()
at flash.data::SQLStatement/checkReady()
at flash.data::SQLStatement/execute()
at Function/com.lang.SQL:SQLErrorStack/deleteAllRecordsFromErrorStackTable/com.lang.SQL:connOpenHandler()[C:\work\Lang\trunk\actionscript\src\com\lang\SQL\SQLErrorStack.as:466]

看起来前面的代码没有完成执行而另一个代码已经开始执行。 我的问题是:为什么在第二个连接中执行代码被拒绝了?我期望使用某种队列机制,但事实并非如此。我到处寻找解决方案如何应对这个问题,但我失败了。你能帮我吗?

可以打开数据库连接解决问题吗?我应该对我的代码进行哪些更改呢?

这是与此类似的代码,在我的应用程序中出现了几次。

var SQLquery:String;
SQLquery = "DELETE FROM ErrorStackTable";
        var sqlConn:SQLConnection = new SQLConnection();
        sqlConn.addEventListener(SQLEvent.OPEN, connOpenHandler);

        var dbFile:File = new File();
        dbFile.nativePath = FlexGlobals.topLevelApplication.databaseFullPath_conf+"\\"+FlexGlobals.topLevelApplication.databaseName_conf;

        sqlConn.openAsync(dbFile); // openDB
        sqlSelect = new SQLStatement();
        sqlSelect.sqlConnection = sqlConn;
        sqlSelect.text = SQLquery;

        function connOpenHandler(event:SQLEvent):void
        {
            sqlSelect.addEventListener(SQLEvent.RESULT, resultSQLHandler);
            sqlSelect.addEventListener(SQLErrorEvent.ERROR, errorHandler);
            sqlSelect.execute();
        }

1 个答案:

答案 0 :(得分:0)

在Big Flex应用程序中尝试避免openAsync(db)调用,因为SQL代码具有可重用性,如果您要执行许多sql语句,那么您应该定义越来越多的sql语句。如果你有动态结果[数组]从Web服务(RPC)获取然后你肯定会得到一个错误,虽然它是成功的数据库中的执行和数组插入将失败..只是看看  链接Click Here您将获得答案

我刚刚将 conn.openAsync(db); 更改为 conn.open(db); 并且有效

由于