我在我的应用程序中多次使用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();
}
答案 0 :(得分:0)
在Big Flex应用程序中尝试避免openAsync(db)调用,因为SQL代码具有可重用性,如果您要执行许多sql语句,那么您应该定义越来越多的sql语句。如果你有动态结果[数组]从Web服务(RPC)获取然后你肯定会得到一个错误,虽然它是成功的数据库中的执行和数组插入将失败..只是看看 链接Click Here您将获得答案
我刚刚将 conn.openAsync(db);
更改为 conn.open(db);
并且有效
由于