Actionscript 3 我一直得到一个空的sqlStatement.getResult,这段代码在一个动作脚本移动项目中。

Actionscript 3 我一直得到一个空的sqlStatement.getResult,这段代码在一个动作脚本移动项目中。,actionscript-3,Actionscript 3,我试图保持它的简单,只是添加和显示现在,没有必要删除条目或任何事情,因为现在。非常感谢您的帮助 package { import flash.data.SQLConnection; import flash.data.SQLResult; import flash.data.SQLStatement; import flash.events.Event; import flash.events.SQLErrorEve

我试图保持它的简单,只是添加和显示现在,没有必要删除条目或任何事情,因为现在。非常感谢您的帮助

package
{
        import flash.data.SQLConnection;
        import flash.data.SQLResult;
        import flash.data.SQLStatement;
        import flash.events.Event;
        import flash.events.SQLErrorEvent;
        import flash.events.SQLEvent;
        import flash.filesystem.File;
        import flash.net.URLLoader;
        import flash.net.URLRequest;    
        import screens.LevelSelection;

        public class Database
        {
            public var sqlConnection:SQLConnection;
            private var db:File;
            private var dbStatus:String= "";
            private var dataResult:Object;
            private var playersList:Array;
            public var selectAllSQL:SQLStatement;

            public function openDB():void
            {
                db = File.desktopDirectory.resolvePath("Players.db");
                sqlConnection = new SQLConnection();
                sqlConnection.addEventListener(SQLErrorEvent.ERROR, onSQLError);

                if(db.exists)
                {
                    sqlConnection.addEventListener(SQLEvent.OPEN, onOpenDB);
                    trace("DB Found");
                }
                else
                {
                    sqlConnection.addEventListener(SQLEvent.OPEN, onCreateDb);
                }

                sqlConnection.openAsync(db);
            }

            private function onSQLError(event:SQLErrorEvent):void
            {
                var error:String = "Error id: " 
                    + event.error.errorID + "\nDetails: " + event.error.details;
                dbStatus += event + "Error";
            }

            private function onOpenDB(event:SQLEvent):void
            {
                dbStatus += "The database was opened...";
                if(SQLConnection(event.target).connected)
                {
                    trace(dbStatus);
                }
            }

            public function onCreateDb(event:SQLEvent):void
            {
                dbStatus += "The database was created...";
                createPlayerTable();
                trace(dbStatus);
            }

                    Im not sure if my syntax is right for these statements.                         I tried to trace a lot of things out so that i can see the results in debugging


            public function createPlayerTable():void
            {
                var sqlText:String = 
                    "CREATE TABLE IF NOT EXISTS Players(NAME TEXT,    SCORE INTEGER)";
                var createTableSQL:SQLStatement = new SQLStatement();
                createTableSQL.sqlConnection = sqlConnection;
                trace("Create Table Connection: " 
                    + createTableSQL.sqlConnection.connected);
                createTableSQL.addEventListener(SQLEvent.RESULT, onPlayersTable);
                createTableSQL.addEventListener(SQLErrorEvent.ERROR, onSQLError);
                createTableSQL.text = sqlText;
                createTableSQL.execute();           
                trace(createTableSQL.getResult());
            }

            public function onPlayersTable(event:SQLEvent):void
            {
                dbStatus += "The Players table was created";
                trace(dbStatus);
            }

            public function selectPlayers():void
            {
                var sqlText:String = "SELECT * FROM Players";
                selectAllSQL = new SQLStatement();
                selectAllSQL.sqlConnection = sqlConnection;
                selectAllSQL.addEventListener(SQLErrorEvent.ERROR, onSQLError);
                selectAllSQL.text = sqlText;
                selectAllSQL.execute();
                handleSelection(selectAllSQL);
            }

            public function handleSelection(event:SQLStatement):void
            {
                onSelectPlayers(selectAllSQL);
            }

            public function onSelectPlayers(event:SQLStatement):void
            {
                trace("select called");
                var result:SQLResult = event.getResult();

                if(result.data)
                {               
                    for(var i:int = 0; i < result.data.length; i++)
                    {
                        screens.LevelSelection.output.text += 
                            "Name: " + result.data[i]["NAME"] + ", " + 
                            "Score: " + result.data[i]["SCORE"];
                    }
                }
            }

因为它是异步调用,所以如果放置跟踪(createTableSQL.getResult()),就不会立即得到结果;
在OnPlayerTable方法中,我认为您将获得预期的结果。

。。你的错误从哪里冒出来的?在哪一行?当我在if语句中运行onSelectPlayers方法时,它会弹出。result.data为null。我认为insert调用通常有问题。那么您的数据库是什么样子的?数据到达那里了吗?我不知道如何检查数据是否到达那里。对不起,我还是个笨蛋。。。
            public function addPlayer():void
            {
                var sqlText:String = 
                    "INSERT INTO Players(NAME, SCORE) Values(@name, @score)";
                var addPlayerSQL:SQLStatement = new SQLStatement();
                addPlayerSQL.sqlConnection = sqlConnection;
                trace("ADD PLAYER CONNECTION: " + addPlayerSQL.sqlConnection.connected);
                addPlayerSQL.addEventListener(SQLErrorEvent.ERROR, onSQLError);
                addPlayerSQL.text = sqlText;
                addPlayerSQL.parameters["@name"] = screens.LevelSelection.input.text;
                addPlayerSQL.parameters["@score"] = 0;
                addPlayerSQL.execute(); 
                trace(addPlayerSQL.getResult());
                trace(screens.LevelSelection.input.text);
                trace("Player added");
                selectPlayers();
            }
        }
    }