2012-08-28 43 views
0

我想解決爲什麼我的代碼爲我所有的查詢返回null,並最終發現sql查詢不會返回任何內容。我創建了一個新的AIR文件(S:WindowedApplication的)與簡約代碼:SQL錯誤:「沒有這樣的表」

比這個代碼孤單
<fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      private var sqlConnection:SQLConnection; 
      private var select:SQLStatement; 
      private var databaseFile:File; 

      protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
      { 
       var dbPath:String = "Movie Manager Settings/moovioDB2.db"; 
       databaseFile = File.userDirectory.resolvePath(dbPath); 
       sqlConnection = new SQLConnection(); 
       select = new SQLStatement(); 

       sqlConnection.addEventListener(SQLEvent.OPEN, onDatabaseOpen); 
       sqlConnection.openAsync(); 
      } 

      private function onDatabaseOpen(event:SQLEvent):void 
      { 
       select.sqlConnection = sqlConnection; 
       var query:String = "SELECT title FROM movies"; 
       select.text = query; 
       select.addEventListener(SQLEvent.RESULT, done); 
       select.execute(); 
      } 

      private function done(event:SQLEvent):void{ 
       var res:SQLResult = select.getResult(); 
      } 

     ]]> 
    </fx:Script> 

對方只是由Flex創建標準的標籤。運行後我得到這個錯誤:

Error #2044: Unhandled SQLErrorEvent:. errorID=3115, operation=execute , message=Error #3115: SQL Error. , details=no such table: 'movies' 

我檢查了數據庫文件,2個不同的sqlite的程序和成功執行該查詢。 「電影」表和「標題」列都存在。萬一它很重要電影是3個表中的一個,並有超過10個列都存在值。

我在做什麼錯?我以前使用過相同的代碼(我認爲)與預期的結果,但現在一些變化後,我甚至可以在一個新的文檔中得到這個基本的代碼工作。請檢查出來,看看我是否犯了一個愚蠢的錯誤,因爲我看不到它:)

回答

1

你能證實你打開的數據庫的路徑是你使用外部工具檢查的那個文件的路徑嗎?您可以使用AS3代碼中的database_list pragma。只是執行它像任何其他SQL語句:

[[email protected] ~]$ cd /tmp 
[[email protected] tmp]$ sqlite3 foo.db 
SQLite version 3.7.11 2012-03-20 11:35:50 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> pragma database_list; 
0|main|/tmp/foo.db 
+0

難道你的意思是將「查詢」與「VAR查詢:字符串=‘PRAGMA database_list’;」?如果是這樣,我生成一個錯誤「錯誤#2044:未處理的SQLErrorEvent :. errorID = 3115,操作=執行,消息=錯誤#3115:SQL錯誤,詳細信息= SQL中不允許使用PRAGMA。如果不是,你能指定如何在AS中執行這個查詢嗎? – DominicM

+0

Doh!這一定是我在一段時間內犯的最愚蠢的錯誤,我從未將數據庫文件的位置傳遞給「openAsync()」。 :) – DominicM

+0

接受答案,因爲它確實讓我看到問題,謝謝:)請更新你的答案,以包括修復任何人可能有同樣的問題。而不是「sqlConnection.openAsync();」它應該是「sqlConnection.openAsync(databaseFile);」 – DominicM