Apache flex 在sqlite for flex中,executing()何时返回false?

Apache flex 在sqlite for flex中,executing()何时返回false?,apache-flex,sqlite,air,Apache Flex,Sqlite,Air,我已经阅读了flex语言参考: 如果调用了execute(),并且没有从数据库返回所有结果,则此属性为true 然而,我很难理解这到底意味着什么。我一直收到一个错误: 错误#3106:SQLStatement.executing为true时无法更改属性 我曾尝试为SQLEvent.RESULT创建一个事件处理程序,我的想法是,这就是从数据库返回结果的方式,因此,executing()将返回false-不起作用 这是否意味着我试图太快地更改SQLStatement变量?execute()函数需要

我已经阅读了flex语言参考:

如果调用了execute(),并且没有从数据库返回所有结果,则此属性为true

然而,我很难理解这到底意味着什么。我一直收到一个错误:

错误#3106:SQLStatement.executing为true时无法更改属性

我曾尝试为SQLEvent.RESULT创建一个事件处理程序,我的想法是,这就是从数据库返回结果的方式,因此,executing()将返回false-不起作用

这是否意味着我试图太快地更改SQLStatement变量?execute()函数需要多长时间

有关守则:

private function fileProgress(p_evt:ProgressEvent):void {
            var char:String;
            var line:String = "";
            var counter:int = 1;

            sqlStatement = new SQLStatement();
            sqlStatement.sqlConnection = dbConn;
            while(stream.position < stream.bytesAvailable) 
            {
                char = stream.readMultiByte(1, File.systemCharset);
                if(char == "\n")
                {
                    sqlStatement.text = "INSERT INTO stats VALUES ('" + counter + "','" + line + "');";
                    sqlStatement.execute();
                    counter++;
                    line = "";
                }
                else
                {
                    line += char;
                }
                readProgress.text = ((p_evt.bytesLoaded/1048576).toFixed(2)) + "MB out of " + ((p_evt.bytesTotal/1048576).toFixed(2)) + "MB read";
            }

            if(line != "")
            {
                sqlStatement.text = "INSERT INTO stats VALUES ('" + line + "');";
                sqlStatement.execute();
            }

        }
私有函数fileProgress(p_evt:ProgressEvent):void{
var-char:String;
变量行:String=“”;
变量计数器:int=1;
sqlStatement=新的sqlStatement();
sqlStatement.sqlConnection=dbConn;
while(stream.position
流是一个文件流
我试图读取一个文本文件,并将每一行放入一个新的sqlite表行
我还尝试使用sqlStatement.parameters作为执行插入查询的替代方法,但没有成功。这会引发另一个错误:

错误#3110:SQLStatement.executing为true时无法执行操作


试试看。

如果有人来找我,我想我会把我的解决方案贴到这里

只需将SQL连接从Connection.openAsync()更改为Connection.open()


这对我来说消除了错误

最好为每个查询创建一个新的sqlstation,而不是重用SqlStatement。
它也应该在OpenAsyn模式下工作

var statement:SQLStatement; 
for(..) //LOOP
{
            statement =new SQLStatement();
            statement.sqlConnection = dbConn;
            statement.text="QUERY HERE";
            statement.execute();
}
调用execute()或execute(-1)时-->executing()立即返回false(如果在同步模式下)或在SQLResult事件触发后返回false(如果在异步模式下)


当使用prefetch>0调用execute()时,executing()仅在返回整个结果集时返回false。例如,execute(10)将返回多达10行。如果executing()为true,则表示有更多数据,您需要调用next()来获取接下来的10行。继续调用Next(),直到executing()为false。您可以随时调用cancel()提前退出(就像您只需要前10行一样)。

只是尝试了一下,没有成功。但是我很高兴,因为我不想取消sqlstatement.execute()。我希望它在每次被再次解雇之前都能完成。你所做的就是从异步模式更改为非异步模式。虽然这对于使用大型数据库时希望保持异步的小型应用程序来说没有问题。