Получение следующей записи в базе данных SQLite для мобильного приложения - PullRequest
0 голосов
/ 27 февраля 2011

У меня есть мобильное приложение, которое использует базу данных sqlite.Я не могу понять, как получить доступ к следующей записи, когда пользователь нажимает кнопку «Далее».Моя база данных использует 'id' в качестве первичного ключа с автоинкрементом в качестве целого числа.

    private function nextMoveRPart(event:EffectEvent):void
        {
            var cardNumber:int = parseInt(cardNumberLabel.text);

            stmt.sqlConnection = conn;
            conn.open(File.applicationStorageDirectory.resolvePath("FlashCards.db"));
            stmt.text = "SELECT * FROM cardItems WHERE id = ?" + "AND id <= MAX(id)";
            stmt.parameters[0] = cardNumber+1;
            stmt.addEventListener(SQLEvent.RESULT, resultHandlerPrev);
            stmt.execute();
            conn.close();
            moveEffectRPart2.play();
        }
        function resultHandlerNext(event:SQLEvent):void  // result handler next
        {
            var result:SQLResult = stmt.getResult();
            var numResults:int = result.data.length;
            for(var i:int = 0; i < numResults; i++)
            {
                var row:Object = result.data[i];
                stext1.text = row.cSide1;
                stext2.text = row.cSide2;
                cardNumberLabel.text = row.id;

            }
        }

1 Ответ

1 голос
/ 27 февраля 2011

Вы всегда можете сохранить текущий идентификатор в некоторой переменной в ActionScript. Тогда Вы сможете переписать всю строку запроса. Я думаю, вы можете написать что-то вроде этого:

stmt.text = "SELECT * FROM cardItems WHERE id > " + current_id + " ORDER BY id ASC LIMIT 1;";

current_id является переменной ActionScript. Это должно быть достаточно для sqlite. Вы можете установить current_id на 0 для первой записи. Если пользователь нажимает следующую кнопку, Вы должны сохранить там текущий идентификатор из уже полученной записи.

Второй вариант - использовать OFFSET. Это исключает некоторые записи из начала возвращенного набора строк.

stmt.text = "SELECT * FROM cardItems ORDER BY id ASC LIMIT 1 OFFSET " + your_offset + ";";

your_offset является переменной ActionScript. Это 0, если Вы хотите получить первую запись, 1 для второй, 2 для третьей и т. Д.

===

Попробуйте этот код.

protected function button6_clickHandler(event:MouseEvent):void  // pushed --> button 
        {

            var cardNumber:int = parseInt(cardNumberLabel.text);
            /* Deleted */
            var sqlresult:SQLResult = stmt.getResult();
            stmt.sqlConnection = conn;
            conn.open(File.applicationStorageDirectory.resolvePath("FlashCards.db"));
            /*Edited two lines*/
            stmt.text = "SELECT * FROM cardItems WHERE id > ? ORDER BY id ASC LIMIT 1";
            stmt.parameters[0] = cardNumber;
            stmt.execute();
            trace(sqlresult.data);  // value = [object Object]
            stext1.text = sqlresult.data.cSide1;
            trace(sqlresult.data.cSide1);  // value = 'undefined'
            cardNumberLabel.text = sqlresult.data.id;
            trace(sqlresult.data.id);  // value = 'undefined'
            conn.close();
            moveEffectRPart1.play();
            moveEffectRPart1.addEventListener(EffectEvent.EFFECT_END, nextMoveRPart);

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...