Ошибка SQLite: «не удалось преобразовать текстовое значение в числовое.» - PullRequest
2 голосов
/ 04 ноября 2010

Я нашел обходной путь, но я полностью озадачен проблемой, с которой я столкнулся в Adobe Air и SQLite.Запрос UPDATE, который, как я считаю, работал правильно ранее в процессе разработки, неожиданно начал сбой с ошибкой details:'could not convert text value to numeric value.', operation:'execute', detailID:'2300'.Несколько часов спустя я обнаружил, что если я включил в запрос довольно нерелевантный столбец, установив его в произвольное значение, проблема исчезнет.К счастью, это никак не повлияло на бизнес-логику, поэтому я оставлю все как есть.Однако я ненавижу подобные загадки.Кто-нибудь может подумать о том, что могло случиться?

(Изменить: Извините, я допустил ошибку в своем коде. Последние два запроса были идентичны в моем исходном сообщении. На самом деле, запрос UPDATE работал только тогда, когда я также добавил locked = null или locked = 0 к запросу. Если я не установлю это значение, запрос завершится неудачей. Я сделал все, что мог, чтобы обойти это, включая перестройку файла базы данных.)

Вот определение таблицы:

CREATE TABLE cars (
    car_id INTEGER  PRIMARY KEY AUTOINCREMENT DEFAULT NULL,
    cargroup_id NUMERIC,
    starting_ordinal NUMERIC,
    ending_ordinal NUMERIC,
    locked NUMERIC
);

Этот запрос всегда работал:

var query = new Query(
    "UPDATE cars SET locked = (car_id = ?) WHERE cargroup_id = ?",
    [intCarId,intCargroupId],
    success,failure
);

Этот запрос не выполнен с вышеуказанной ошибкой ([править]):

var query = new Query( 
    "UPDATE cars SET starting_ordinal = ?, ending_ordinal = ?, cargroup_id = ? WHERE car_id = ?",
    [
        parseInt(objPayout.starting_ordinal,10),
        parseInt(objPayout.ending_ordinal,10),
        parseInt(objPayout.cargroup_id,10),
        parseInt(objPayout.car_id,10)
    ],
    success,failure
);

Я решил проблему с помощьюизменив запрос на это:

var query = new Query(
    "UPDATE cars SET starting_ordinal = ?, ending_ordinal = ?, cargroup_id = ?, locked = null WHERE car_id = ?",
    [
        parseInt(objPayout.starting_ordinal,10),
        parseInt(objPayout.ending_ordinal,10),
        parseInt(objPayout.cargroup_id,10),
        parseInt(objPayout.car_id,10)
    ],
    success,failure
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...