2009-11-25 38 views
2

我使用Sqlite作为嵌入式数据库,使用Flex + AIR中的拼写检查功能对编辑器进行了devloping。 在数据库中我有一个表格。该表包含词汇。我写了代码来搜索表中的单词。所有这些我都使用了同步方法。这会在搜索时暂停我的应用程序。 我想使用异步方法来停止应用程序暂停。Flex AIR Sqlite作为嵌入式数据库

的搜索词的代码如下:

public function searchInDictionary(word:String):Boolean 
    { 
    if(word == "") 
    return true; 
     connection= new SQLConnection(); 
     var query:SQLStatement = new SQLStatement(); 
     query.sqlConnection = connection; 
     query.text = 'SELECT id FROM tbl_'+ CommonLanguageCode +' WHERE word LIKE "'+word+'"';  

     try 
     {   
     connection.open(dbfile,SQLMode.READ); 
     } 
     catch(ex:Error) 
     {} 

     if(!connection.connected) 
     connection.open(dbfile); 
     query.execute(); 
     var result:SQLResult = query.getResult(); 
     if(result.data == null) 
     { 
     return false; 
     } 
     else 
     { 
     var numRows:uint = result.data.length; 
     var id:String; 
     if(numRows>0) 
      return true; 
     return false; 
     } 
     return false;   
    } 

如果该函数返回false(字未找到),然后我必须在函数调用,以红色下划线这个词。

如果我出错了,请给我建议。正如我使用同步方法&它需要几毫秒来搜索一个字。如果我正在写一段话,那么它会让我的申请呆滞。

是否有其他方式可以存储文字&搜索更快。如果是的话请等我知道。

在此先感谢。

回答

1

您需要稍微重新组织代码,以便在结果返回而不是从方法返回布尔值时调用您的函数,该函数执行红色下划线。

public function searchInDictionary(word:String):void 
{ 
    // Don't bother searching if no word was passed in 
    if(word == "") return; 

    // Open db connection asynchronously 
    var connection:SQLConnection = new SQLConnection(); 
    connection.openAsync(dbfile, SQLMode.READ); 

    // Create statement 
    var statement:SQLStatement = new SQLStatement(); 
    statement.sqlConnection = connection; 
    statement.text = 'SELECT id ' 
      + 'FROM tbl_'+ CommonLanguageCode +' ' 
      + 'WHERE word LIKE "' + word + '"'; 

    // Add event listener 
    statement.addEventListener(SQLEvent.RESULT, function(event:SQLEvent):void{ 
    var result:SQLResult = event.target.getResult(); 
    if(result.data.length == 0) { 
     // ... call method to red underline word in text ... 
    } 
    }); 

    // Execute statement 
    statement.execute(); 

}