我读过flex语言参考: http://livedocs.adobe.com/flex/3/langref/flash/data/SQLStatement.html#executing
但是,我无法理解这意味着什么。我一直收到错误:如果调用了execute()并且没有从数据库返回所有结果,则此属性为true。
错误#3106:当SQLStatement.executing为true时,无法更改属性。
我已经尝试为SQLEvent.RESULT创建一个事件处理程序,我的想法就是如何从数据库返回结果,因此execution()将返回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();
}
}
stream是一个文件流
我正在尝试读取文本文件并将每行放入一个新的sqlite表行。
我也尝试使用sqlStatement.parameters作为我的插入查询的替代方法,但没有运气。这引发了一个不同的错误:
错误#3110:SQLStatement.executing为true时无法执行操作。
答案 0 :(得分:1)
最好为每个查询创建一个新的SQLStatment,而不是重用SqlStatement 它也应该在OpenAsyn模式下工作。
var statement:SQLStatement;
for(..) //LOOP
{
statement =new SQLStatement();
statement.sqlConnection = dbConn;
statement.text="QUERY HERE";
statement.execute();
}
答案 1 :(得分:0)
尝试cancel()。
答案 2 :(得分:0)
如果有人来这里看,我想我会发布我的解决方案。
只需将SQL连接从connection.openAsync()更改为connection.open()
即可这为我摆脱了错误
答案 3 :(得分:0)
调用execute()或execute(-1)时 - &gt; execution()立即返回false(如果处于同步模式)或者在SQLResult事件触发后(如果处于异步模式)。
使用prefetch&gt;调用execute()时0 execution()仅在返回整个结果集时返回false。例如,execute(10)将返回最多10行。如果execution()为true表示有更多数据,则需要调用next()来获取接下来的10行。继续调用Next()直到执行()为false。你可以随时调用cancel()来提前退出(就像你只想要前10行一样。)